模板方法模式, 模板方法模式应该算是比较简单容易理解的了。
定义:
定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
适用性:
1、 一次性实现一个算法的不变部分,并将可变的行为留给子类来实现。
2、 各子类中公共的行为应该被提取出来并集中到一个公共父类中以避免代码重复。
3、 控制子类扩展。
结构:
实现:
class AbstractClass
{
public:
//模板方法
voidTemplateMethod()
{
doSomething();
doAnything();
}
protected:
//基本方法
virtual void doSomething() = 0;
virtual void doAnything() = 0;
};
class ConcreteClassA:public AbstractClass
{
protected:
//子类重定义基本方法
void doSomething()
{
cout<<"ConcreteClassA doSomething"<<endl;
}
void doAnything()
{
cout<<"ConcreteClassA doAnything"<<endl;
}
};
class ConcreteClassB:public AbstractClass
{
protected:
voiddoSomething()
{
cout<<"ConcreteClassB doSomething"<<endl;
}
voiddoAnything()
{
cout<<"ConcreteClassB doAnything"<<endl;
}
};
AbstractClass *pa = new ConcreteClassA;
AbstractClass *pb = new ConcreteClassB;
pa->TemplateMethod();
pb->TemplateMethod();