模板模式
使用场景:父类是一个纯虚类,提供一个接口,具体由子类实现,类似于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; }