模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式,类似与基类
子类的多态实现 对于继承多态熟悉的人 经常用在工作中无形中就在用此法了。
在模板方法模式中,可以将相同的代码放在父类中,例如将模板方法“请客”以及基本方法“点单”和“买单”的实现放在父类中,而对于基本方法“吃东西”,在父类中只做一个声明,将其具体实现放在不同的子类中,在一个子类中提供“吃面条”的实现,而另一个子类提供“吃满汉全席”的实现。通过使用模板方法模式,一方面提高了代码的复用性,另一方面还可以利用面向对象的多态性,在运行时选择一种具体子类,实现完整的“请客”方法,提高系统的灵活性和可扩展性。
模版方法通过把不变行为搬移到超类中,去除子类中重复的代码 很好的实现代码复用。
// template method pattern 就是工作中常用的继承跟多态
class Resume
{
protected: //保护成员
virtual void SetPersonalInfo() {}
virtual void SetEducation() {}
virtual void SetWorkExp() {}
public:
void FillResume()
{
SetPersonalInfo();
SetEducation();
SetWorkExp();
}
};
class ResumeA: public Resume
{
protected:
void SetPersonalInfo() { cout<<"A's PersonalInfo"<<endl; }
void SetEducation() { cout<<"A's Education"<<endl; }
void SetWorkExp() { cout<<"A's Work Experience"<<endl; }
};
class ResumeB: public Resume
{
protected:
void SetPersonalInfo() { cout<<"B's PersonalInfo"<<endl; }
void SetEducation() { cout<<"B's Education"<<endl; }
void SetWorkExp() { cout<<"B's Work Experience"<<endl; }
};
int main()
{
Resume *r1;
r1 = new ResumeA();
r1->FillResume();
delete r1;
r2 = new ResumeB();
r2->FillResume();
delete r2;
r2 = NULL;
return 0;
}