模板方法模式(template method)

定义

Template Method Pattern:Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
模板方法模式:定义一个操作中的算法的框架,将一些步骤延迟到子类中实现。模板方法让子类能够在不改变算法结构的前提下,重新定义算法某些特定的步骤。

类图

模板方法类图

由类图中可以看出模板方法模式使用了继承。

  1. AbstractClass: 在抽象类中定义了一系列基本操作(PrimitiveOperation),这些操作可以是具体的也可以是抽象的,每一个操作对应算法的一个步骤,在其子类中可以重新定义这些步骤。同时,在抽象类中实现了一个模板方法(TemplateMethod),用于定义一个算法的框架。在模板方法中,调用组织基本操作来搭建算法的框架。
  2. ConcreteClass: 继承了AbstractClass,用于实现在父类中声明的抽象基本操作来完成特定算法的步骤,也可以覆盖在父类中已经实现的具体基本操作。

模式实现

  1. 模板方法:一个模板方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。
  2. 基本方法:基本方法实现算法各个步骤的方法,是模板方法的组成部分。基本方法可以分成三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)。
  • 抽象方法:一个抽象方法由抽象类声明,由其具体子类实现。
  • 具体方法:一个具体方法由一个抽象类声明并实现,其子类可以覆盖也可以直接继承。
  • 钩子方法:一个钩子方法由一个抽象类声明并实现,而其子类可能会对其进行扩展,通常在父类中给出的是一个空方法。

与策略模式的区别

模板方法模式和策略模式所要解决的问题是类似的,两者都可以分离高层的算法和底层的具体实现细节。不过模板方法模式使用了继承来解决问题,而策略模式使用的则是委托。此外,策略模式也允许具体实现细节独立于高层的算法重用,不过要以一些额外的复杂性、内存和运行时间开销作为代价。

总结

  1. 继承
  2. 模板方法定义算法框架
  3. 子类实现某些特定步骤
  4. 分离高层算法和底层实现
  5. 不灵活,算法无法重用(策略模式可以)

参考:

模板方法模式深度解析

你可能感兴趣的:(模板方法模式(template method))