定义
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.
模板方法模式:定义一个操作中的算法的框架,将一些步骤延迟到子类中实现。模板方法让子类能够在不改变算法结构的前提下,重新定义算法某些特定的步骤。
类图
模板方法类图由类图中可以看出模板方法模式使用了继承。
- AbstractClass: 在抽象类中定义了一系列基本操作(PrimitiveOperation),这些操作可以是具体的也可以是抽象的,每一个操作对应算法的一个步骤,在其子类中可以重新定义这些步骤。同时,在抽象类中实现了一个模板方法(TemplateMethod),用于定义一个算法的框架。在模板方法中,调用组织基本操作来搭建算法的框架。
- ConcreteClass: 继承了AbstractClass,用于实现在父类中声明的抽象基本操作来完成特定算法的步骤,也可以覆盖在父类中已经实现的具体基本操作。
模式实现
- 模板方法:一个模板方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。
- 基本方法:基本方法实现算法各个步骤的方法,是模板方法的组成部分。基本方法可以分成三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)。
- 抽象方法:一个抽象方法由抽象类声明,由其具体子类实现。
- 具体方法:一个具体方法由一个抽象类声明并实现,其子类可以覆盖也可以直接继承。
- 钩子方法:一个钩子方法由一个抽象类声明并实现,而其子类可能会对其进行扩展,通常在父类中给出的是一个空方法。
与策略模式的区别
模板方法模式和策略模式所要解决的问题是类似的,两者都可以分离高层的算法和底层的具体实现细节。不过模板方法模式使用了继承来解决问题,而策略模式使用的则是委托。此外,策略模式也允许具体实现细节独立于高层的算法重用,不过要以一些额外的复杂性、内存和运行时间开销作为代价。
总结
- 继承
- 模板方法定义算法框架
- 子类实现某些特定步骤
- 分离高层算法和底层实现
- 不灵活,算法无法重用(策略模式可以)
参考:
网友评论