一、模板方法模式概述
模板方法模式在一个方法中定义一个算法的股价,而将一些不走延迟加载到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。
二、模板方法模式结构
模板方法的角色:
AbstractClass,实现一个模板方法,定义了算法的骨架,具体子类将重新定义算法的其中某些步骤。AbstractClass其实就是一个抽象模板,定义并实现了一个模板方法,这个模板方法一般是一个具体的方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应抽象操作中,推迟到子类实现。当然顶级逻辑也可能会调用一些具体方法。
ConcreteClass,实现具体的某些算法与特定子类相关的步骤,ConcreteClass实现父类所定义的一个或者多个抽象方法,每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而每一个ConcreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。
三、代码示例
冲咖啡和冲茶都有类似的流程,但是某些步骤会有点不一样,要求复用那些相同步骤的代码。
AbstractClass
ConcreteClass
测试代码
四、模板方法模式优缺点
1、优点
(1)重用代码,模板方法通过把不变的行为搬移到父类,去除了子类中的重复代码。
(2)子类实现算法的细节,有助于算法的扩展。
(3)通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合开闭原则。
2、缺点
模板方法子类执行的结果影响了父类的结果,会增加代码的阅读难度。