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