小小及

模板模式

使用场景:父类是一个纯虚类,提供一个接口,具体由子类实现,类似于C#的接口。

#ifndef _TEMPLATEMETHOD_H_
#define _TEMPLATEMETHOD_H_
 
//抽象模板,并定义了一个模板方法。
class Base
{
public:
    ~Base(){};
    //具体的模板方法,给出了逻辑的骨架,而逻辑的组成是一些相应的抽象操作,它们都推迟到子类中实现
    void TemplateMethod()
{
this->Action1();
this->Action2();
    };
    //一些抽象行为,放到子类中去实现
    virtual void Action1()=0;
    virtual void Action2()=0;
protected:
    Base(){};
private:
};
 
//实现基类所定义的抽象方法
class ConcreteClassA : public Base
{
public:
    ConcreteClassA(){};
    ~ConcreteClassA(){};
    //实现基类定义的抽象行为
    virtual void Action1(){printf "classA Action1";};
    virtual void Action2(){printf "classA Action2";};
private:
};
 
//实现基类所定义的抽象方法
class ConcreteClassB : public Base
{
public:
    ConcreteClassB(){};
    ~ConcreteClassB(){};
    //实现基类定义的抽象行为
    virtual void Action1(){printf "classB Action1";};
    virtual void Action2(){printf "classB Action2";};
private:
};
#endif

 使用:

int main()
{
    //ConcreteClassA与ConcreteClassB可相互替换
    Base* pAbstract = new ConcreteClassA();
    pAbstract->TemplateMethod();
 
    pAbstract = new ConcreteClassB();
    pAbstract->TemplateMethod();
    
    return 0;
}

  

 

posted on 2018-08-14 11:05  小小及  阅读(131)  评论(0编辑  收藏  举报

导航