模板模式

模板模式

阶段1

//程序库开发人员
class Library
{
public:
  void step1();
  void step3();
  void step5();
}

//应用程序开发人员
class Application
{
public:
  bool step2();
  bool step4();
}

int main()
{
  Labrary lib;
  Application app;
  
  lib.step1();
  
  if(app.step2())
  {
    lib.step3();
  }
  
  for(int i=0;i<4;++i)
  {
    app.step4();
	}
  
  lib.step5();
}

image-20210911195712602

阶段2

//应用程序开发人员
class Libary
{
public:
  Libary();
  virtual ~Libary();
  
  void run()
  {
    step1();

    if(step2())
    {
      step3();
    }

    for(int i=0;i<4;++i)
    {
      step4();
    }

    step5();
  }
  
protected:
  void step1();//稳定
  void step3();//稳定
  void step5();//稳定
  
  virtual bool step2();//变化
  virtual bool step4();//变化
}

//应用程序开发人员
class Application : public Libary
{
protected:
	virtual bool step2() override;//子类化实现
	virtual bool step4() override;//子类化实现
}

int main()
{
  Library* lib=new Application();
  lib->run();
  delete lib;
}

模式定义

定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中,Template Method 使得子类可

以不改变(复用)一个算法的结构即可重定义(override重写)该算法的特写步骤。

类图

classDiagram class AbstractClass{ +TemplateMethod() #PrimitiveOperation1() #PrimitiveOperation1() } class ConcreteClass{ #PrimitiveOperation1() #PrimitiveOperation1() } AbstractClass <|-- ConcreteClass
posted @ 2021-10-04 17:46  暹罗吹雪  阅读(21)  评论(0编辑  收藏  举报