一、定义
模板模式是一种行为设计模式,它在抽象类里定义了一个操作中的算法骨架,将一些步骤的实现延迟到子类。这样一来,子类可以在不改变算法结构的基础上,重新定义算法里某些步骤的具体实现。
二、包含结构
模板模式中包含抽象类和具体子类
1.抽象类:包含有模板方法、具体方法和抽象方法。模板方法定义了算法的骨架,抽象方法则由子类对其重写来实现。
2.具体子类:实现抽象类中的抽象方法,完成其中特定步骤的具体实现。
三、优缺点
1.优点:
(1)代码复用性高:将固定不变的部分封装在抽象类的模板方法中,可变的部分则交由子类来实现,从而避免了代码的重复编写。
(2)可维护性强:由于其核心部分在抽象类的模板方法中,当需要修改算法的整体结构时,只需要在抽象类中进行修改,而不会影响到各个子类。
(3)符合开闭原则:“对扩展开放,对修改关闭”。可以通过创建新的子类来扩展其中的某些步骤,而无需修改抽象类中的模板方法。
(4)反向控制结构:允许子类在不改变算法的整体结构的情况下,重新定义算法中的某些步骤,实现了子类对父类的反向控制。
2.缺点:
(1)类的数量增加:抽象类和具体子类的数目过多,会导致系统的类结构变得复杂,增加了理解和维护的难度。
(2)灵活性受限:因为抽象类中的模板方法已经固定了,导致子类的一些实现可能会受到一定的限制。
(3)调试难度的增加:如果具备了过多的抽象方法和具体方法,并且这些方法分布在抽象类和具体子类中,导致的调试难度的增加。
四、适用场景
多个子类有多个共有的方法,且逻辑基本相同,那么就可以将这些共有的方法封装起来,形成模板方法,对于一些特定的步骤,则交由子类来实现。
五、示例代码:
场景为制作不同的饮品,通用流程封装在抽象类中,特定的流程由子类来实现。
运行结果: