设计模式学习(十一)(模板方法模式)

模式名称

模板方法模式(Template Method Pattern)

解决问题

定义一个算法的骨架,将一些步骤延迟到子类里面实现,使得子类在不改变算法结构的情况下,可以重新定义算法里的某些步骤。

就比如说我们来冲泡咖啡/冲泡茶,我们首先需要烧水,然后在杯子中加入咖啡/茶,然后倒入热水最后加入调料。

他们两个问题的解决方法基本是类似的,于是我们可以把这个算法骨架给定义下来,然后在子类里再进行某些部分的算法填充。

解决方法

基本方法又可以分为三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)。

抽象方法:一个抽象方法由抽象类声明,由具体子类实现。在Java语言里抽象方法以abstract关键字标示。

具体方法:一个具体方法由抽象类声明并实现,而子类并不实现或置换。

钩子方法:一个钩子方法由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。

1.编写抽象类,定义抽象方法与方法调用以及钩子方法。

2.继承抽象类,实现抽象方法以实现不同的算法。

设计原则

别调用我们,我们会调用你。(子类不调用父类里的方法,而是父类调用子类的方法,子类中只给出部分方法的实现)

模板方法模式优点

1.代码复用。

2.利用子类来扩展行为符合开闭原则。

3.在父类中提供了算法调用顺序,结构清晰。

模板方法模式缺点

1.不同的实现都需要定义一个子类,使得系统变得复杂。

源码

(完)

打赏