抽象类在模板方法模式中定义算法骨架,通过final模板方法锁定执行顺序,以抽象方法预留可变环节,并提供默认实现与钩子机制,辅以访问控制保障设计契约。

抽象类在模板方法模式中承担算法骨架的定义者角色,它不直接完成具体任务,而是划定流程边界、预留可变接口,并控制整体执行顺序。
定义模板方法并锁定流程结构
抽象类中必须声明一个final(或不可重写)的模板方法,该方法按固定顺序调用若干基本步骤。这个方法就是算法的“主干”,子类无法修改其调用逻辑,从而保障流程稳定性。例如制作饮品的makeDrink()方法,始终按“准备原料→加热→混合→装杯”顺序执行,顺序由父类强制约定。
声明抽象方法作为可变环节
那些因具体场景而异的操作,如“选哪种豆子”“加多少奶”“是否加糖”,在抽象类中以抽象方法形式声明(如selectBean()、addMilk())。这些方法没有实现,强制子类提供具体逻辑,实现算法中“变与不变”的清晰分离。
提供默认实现与钩子机制
抽象类还可包含两类辅助方法:
- 具体方法:已实现的公共逻辑,如日志记录、参数校验、资源清理,所有子类直接复用;
-
钩子方法:有默认空实现(如
isExtraRequired()),子类可选择覆盖,用于条件分支控制——比如仅在特定饮品中触发额外步骤。
避免子类破坏设计契约
抽象类通过访问控制和方法修饰传递设计意图:
- 模板方法设为
final,防止子类意外重写导致流程错乱; - 抽象方法设为
protected,限制外部调用,确保只被模板方法驱动; - 构造逻辑放在抽象类中(如初始化配置),保证子类实例化时基础状态一致。











