简介
模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤。
角色
抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,以完成完整的算法。
类图
示例
抽象
public abstract class AbstractTemplate { /** * 模板方法 */ public void templateMethod() { abstractMethod(); hookMethod(); concreteMethod(); } /** * 虚拟方法的声明(由子类实现) */ protected abstract void abstractMethod(); /** * 钩子方法 * 默认or空 如果子类实现就附加业务 */ protected void hookMethod() { System.out.println("钩子方法:空或者默认"); } /** * 基本方法(已经实现) */ private void concreteMethod() { //具体业务 System.out.println("具体实现方法"); } }
具体
public class ConcreteTemplate extends AbstractTemplate { //基本方法的实现 protected void abstractMethod() { //业务相关的代码 System.out.println("实现虚拟方法"); } //重写父类的方法 按业务需求 是否重写钩子方法 @Override protected void hookMethod() { //业务相关的代码 System.out.println("钩子方法"); } }
Head First 设计模式(中文版)的示例:
码云地址:https://gitee.com/manusas/TemplateMethod