设计模式C++模板方法模式-实际处理交给子类

模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术。

  模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method),这个设计模式的名字就是从此而来。

  模板方法所代表的行为称为顶级行为,其逻辑称为顶级逻辑。

1、PatternTemplateMethod.h

#ifndef _PATTERNTEMPLATEMETHOD_H_
#define _PATTERNTEMPLATEMETHOD_H_

#include <iostream>
#include <string>

using namespace std;

class Teacher1
{
public :
    virtual void teachStart()=0;
    virtual void teachStop()=0;
};

class ChinaTeacher:public Teacher1
{
private :
    string s;
public :
    ChinaTeacher(const string & s)
    {
        this->s=s;
    }
    virtual void teachStart(){
        cout<<"ChinaTeacher-->teachStart--->"<<s<<endl;
    }
    virtual void teachStop(){
        cout<<"ChinaTeacher-->teachStop--->"<<s<<endl;
    }
};

class EnglishTeacher:public Teacher1
{
private :
    string s;
public :
    EnglishTeacher(const string & s)
    {
        this->s=s;
    }
    virtual void teachStart(){
        cout<<"EnglishTeacher-->teachStart--->"<<s<<endl;
    }
    virtual void teachStop(){
        cout<<"EnglishTeacher-->teachStop--->"<<s<<endl;
    }
};

#endif

2、Client.cpp

#include <iostream> 

#include "PatternTemplateMethod.h"
#include <string>

using namespace std;  


int main()  
{  
    string s("zhongguorenmin");
    Teacher1 * t=new ChinaTeacher(s);
    t->teachStart();
    t->teachStop();
    t=new EnglishTeacher(s);
    t->teachStart();
    t->teachStop();

    delete t;

    system("pause");  
    return 0;  
}  

你可能感兴趣的:(设计模式,C++,模板方法设计模式)