模板方法模式

 

定义:

 

  模板模式提供一个代码复用平台。将变与不变区分开,将不变的部分抽取出来定义在父类中,比如算法骨架,一些公共的,固定实现。这些不变的被封闭起来,尽量不去修改他们;通过子类实现可变化的步骤。

 

结构图:

 

 

 

代码:

 

//AbstractClass抽象类

 

class AbstractClass

 

{

 

public:

 

//算法骨架

 

  public void TemplateMethod()

  {

    。。。

    PrimitiveOperation1();

    PrimitiveOperation2();

    。。。

  }

//需要子类实现的抽象行为

  virtual void PrimitiveOperation1() ;

  virtual void PrimitiveOperation2() ;

 

}

 

//ConcreteClass实现子类A,可以有无限制个实现

 

class ConcreteClassA  : AbstractClass

 

{

 

//实现具体行为

 

   void PrimitiveOperation1()

 

  {

    。。。;

 

  }

   void PrimitiveOperation2()

  {

    。。。;

  }

 

}

//ConcreteClass实现子类B,可以有无限制个实现

class ConcreteClassB  : AbstractClass

{

//实现具体行为

   void PrimitiveOperation1()

  {

    。。。;

  }

   void PrimitiveOperation2()

  {

    。。。;

  }

}

 

//客户端

 

AbstractClass cAbstractClass = new ConcreteClassA();//将子类声明为父类,利用多态实现代码复用

 

cAbstractClass.TemplateMethod();

cAbstractClass = new ConcreteClassB();

cAbstractClass.TemplateMethod();

 

 

使用时机:

 

  当完成一个过程,仅有某个更详细的步骤实现不同时,通常考虑使用模板。就是说当不变和可变的行为在实现时混合在一起,导致不变的行为重复出现时,就应该考虑模板模式了。

 

 

 

优点:把不变行为搬到抽象父类中,去除子类中的重复代码;符合单一原则、开放封闭原则。

 

缺点:每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象

 

 

posted @ 2020-07-25 16:42  吉尔加斯  阅读(104)  评论(0编辑  收藏  举报