现在的位置: 首页 > 综合 > 正文

读《大话设计模式》---模板方法模式(TemplateMethond)

2012年11月21日 ⁄ 综合 ⁄ 共 1319字 ⁄ 字号 评论关闭

模板方法模式:

        定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

 

模板方法的一般实现:

  1. //AbstractClass是一个抽象类,其实也就是一个抽象模板,并且实现了一个模板方法。
    //这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步
    //骤在相应的抽象操作中,推迟到了子类中实现,顶级逻辑也可能调用一些具体方法。
  2. class AbstractClass
  3. {
  4. public:
  5. //固定的执行顺序,就像生产果汁的工序,不管子类是榨苹果汁还是葡萄汁,都按这一套执行。
  6.     void TemplateMethond()
  7.     {
  8.         PrimitiveOperation1();
  9.         PrimitiveOperation2();
  10.     }
  11. protecetd:
  12.     virtual void PrimitiveOperation1() = 0;
  13.     virtual void PrimitiveOperation2() = 0;
  14. };
  15. class ConcreteClassA : public AbstractClass
  16. {
  17. public:
  18.     virtual void PrimitiveOperation1()
  19.     {
  20.         cout << "具体类A方法实现1" << endl;
  21.     }
  22.     virtual void PrimitiveOperation2()
  23.     {
  24.         cout << "具体类A方法实现2" << endl;
  25.     }
  26. };
  27. class ConcreteClassB : public AbstractClass
  28. {
  29. public:
  30.     virtual void PrimitiveOperation1()
  31.     {
  32.         cout << "具体类B方法实现1" << endl;
  33.     }
  34.     virtual void PrimitiveOperation2()
  35.     {
  36.         cout << "具体类B方法实现2" << endl;
  37.     }
  38. };
  39. int main(int argc, char* argv[])
  40. {
  41.     AbstractClass * abs1 = new ConcreteClassA();
  42.     abs1->TemplateMethond();
  43.     AbstractClass * abs2 = new ConcreteClassB();
  44.     abs2->TemplateMethond();
  45.     return 0;
  46. }

模板方法模式是通过把不变行为转移到基类,去除子类中的重复代码来体现它的优势。模板方法模式就是提供了一个很好的代码复用平台。当不变的和可变的行为在子类的方法中混合出项时,不变的行为就会在子类中重复出现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的部分。


From: http://blog.csdn.net/jia_xiaoxin/article/details/3320612

抱歉!评论已关闭.