模板模式
使用場景:父類是一個純虛類,提供一個接口,具體由子類實現,類似于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號