设计模式(24)模板模式

模板模式简介

模板模式就是类似于一种类的继承的代码复用技术,此种模式结构只存在基类和派生类之间的关系

模板方法模式:定义一个算法的框架,将一些步骤延迟到子类中,模板模式可以使得子类不改变一个算法的接口即可重新定义某些算法的特定步骤。

模板方法结构

设计模式(24)模板模式_第1张图片
模板模式的结构只有两个角色:

  • AbstractClass(基类):即抽象类,在基类中定义或声明了一系列基本操作,这些操作可以是具体或者是者抽象的,每一个操作都对应算法的一个步骤,这些步骤在其派生类中都可以重定义。基类规定了算法的流程框架,模板方法由基类定义或声明的一系列基本操作按照一定流程实现。
  • ConcreteClass(派生类):实现在基类中声明的抽象方法,也可以覆盖在基类中已经实现的方法。

模板模式代码实例

#include 

using namespace std;

class AbstractClass
{
     
public:
  void TemplateMethod()
  {
     
    PrimitiveOperation1();
    cout << "TemplateMethod" << endl;
    PrimitiveOperation2();
  }

protected:
  virtual void PrimitiveOperation1()
  {
     
    cout << "Default Operation1" << endl;
  }

  virtual void PrimitiveOperation2()
  {
     
    cout << "Default Operation2" << endl;
  }
};

class ConcreteClassA : public AbstractClass
{
     
protected:
  virtual void PrimitiveOperation1()
  {
     
    cout << "ConcreteA Operation1" << endl;
  }

  virtual void PrimitiveOperation2()
  {
     
    cout << "ConcreteA Operation2" << endl;
  }
};

class ConcreteClassB : public AbstractClass
{
     
protected:
  virtual void PrimitiveOperation1()
  {
     
    cout << "ConcreteB Operation1" << endl;
  }

  virtual void PrimitiveOperation2()
  {
     
    cout << "ConcreteB Operation2" << endl;
  }
};

int main()
{
     
  AbstractClass *pAbstractA = new ConcreteClassA;
  pAbstractA->TemplateMethod();

  AbstractClass *pAbstractB = new ConcreteClassB;
  pAbstractB->TemplateMethod();

  if (pAbstractA)
    delete pAbstractA;
  if (pAbstractB)
    delete pAbstractB;
}

模板模式总结

有了基类和派生类的基础,模板模式很好理解,有兴趣的话,可以和装饰模式进行对比一下,有些类似的地方。

你可能感兴趣的:(设计模式)