大话设计模式学习(八)——模板方法模式
2010-06-01 22:09
232 查看
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构既可重定义该算法的某些特定步骤
AbstractClass是抽象类,其实也就是一抽象模板,定义并实现了一个模板方法,这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法
ConcreteClass,实现父类所定义的一个或多个抽象方法。每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而每一个ConcreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同
客户端:
模板方式模式是通过把不变形为搬移到超类,去除子类中的重复代码来体现它的优势,它提供了一个很好的代码复用平台。因为有时候,我们会遇到一系列步骤构成的过程需要执行。这个过程从高层次看是相通的,但有些步骤的实现可能不同,这时用模板方式模式是很好的选择。
也就是说,当可变的和不变的行为在子类中混在一起的时候,不变的行为就会在子类中重复出现,我们通过模板方法把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变形为的纠缠
AbstractClass是抽象类,其实也就是一抽象模板,定义并实现了一个模板方法,这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法
class AbstractClass { public: AbstractClass(void); ~AbstractClass(void); //一些抽象行为,放到子类去实现 virtual void PrimitiveOperation1()=0; virtual void PrimitiveOperation2()=0; //模板方法,给出了逻辑的骨架,而逻辑的组成是一些相应的抽象操作,他们都推迟到子类实现 void TemplateMethod() { PrimitiveOperation1(); PrimitiveOperation2(); cout<<"Template"; } };
ConcreteClass,实现父类所定义的一个或多个抽象方法。每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而每一个ConcreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同
class ConcreteClassA:public AbstractClass { public: void PrimitiveOperation1() { cout<<("具体类A方法1实现"); } void PrimitiveOperation2() { cout<<("具体类A方法2实现"); } }; class ConcreteClassB:public AbstractClass { void PrimitiveOperation1() { cout<<("具体类B方法1实现"); } void PrimitiveOperation2() { cout<<("具体类B方法2实现"); } };
客户端:
void main() { AbstractClass* c; c=new ConcreteClassA; c->TemplateMethod(); delete c; c=NULL; c=new ConcreteClassB; c->TemplateMethod(); }
模板方式模式是通过把不变形为搬移到超类,去除子类中的重复代码来体现它的优势,它提供了一个很好的代码复用平台。因为有时候,我们会遇到一系列步骤构成的过程需要执行。这个过程从高层次看是相通的,但有些步骤的实现可能不同,这时用模板方式模式是很好的选择。
也就是说,当可变的和不变的行为在子类中混在一起的时候,不变的行为就会在子类中重复出现,我们通过模板方法把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变形为的纠缠
相关文章推荐
- 《大话设计模式》之模板方法模式
- 小菜学习设计模式(一)—模板方法(Template)模式
- 设计模式学习笔记——模板方法模式
- 设计模式学习--模板方法模式(Tamplate Pattern)
- 设计模式学习之----模板方法模式
- 学习php设计模式 php实现模板方法模式
- 模板方法设计模式--学习笔记
- 大话设计模式之模板方法模式
- 设计模式学习笔记之-模板方法
- Java学习笔记之抽象(abstract)与模板方法设计模式
- HeadFirst 设计模式学习笔记8--模板方法模式
- 设计模式学习总结-模板方法模式(Template Method)
- java设计模式学习之模板方法模式
- 设计模式学习笔记(二十四)——Template Method模板方法
- 《大话设计模式》之--第10章 考题抄错会做也白搭----模板方法模式
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- 大话设计模式(Python版)--模板方法模式
- 模板方法模式- 设计模式学习
- CSharp设计模式读书笔记(23):模板方法模式(学习难度:★★☆☆☆,使用频率:★★★☆☆)
- 模板方法模式学习笔记