模板模式
模板方法模式,定义一个操作中的算法骨架哎,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
主要作用
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
使用场景
- 有多个子类共有的方法,且逻辑相同。
- 重要的、复杂的方法,可以考虑作为模板方法。
实现
AbstractClass是抽象类,其实也就是一抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架哎,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。
class AbstractClass
{
public:
virtual void PrimitiveOperation1() = 0;
virtual void PrimitiveOperation2() = 0;
void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
cout<<endl;
}
};
ConcreteClass,实现父类所定义的一个或多个抽象方法。每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而每一个ConcreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。
class ConcreteClassA : public AbstractClass
{
public:
void PrimitiveOperation1() override
{
cout<<"具体类B方法1实现"<<endl;
}
void PrimitiveOperation2() override
{
cout<<"具体类B方法2实现"<<endl;
}
};
class ConcreteClassB : public AbstractClass
{
public:
void PrimitiveOperation1() override
{
cout<<"具体类B方法1实现"<<endl;
}
void PrimitiveOperation2() override
{
cout<<"具体类B方法2实现"<<endl;
}
};
客户端调用
int main()
{
AbstractClass * c;
c = new ConcreteClassA();
c->TemplateMethod();
free(c);
c = new ConcreteClassB();
c->TemplateMethod();
}