模板方法模式通过抽象类定义算法骨架,将可变步骤声明为抽象方法由子类实现,封装固定流程于final模板方法中,并提供可选钩子方法增强灵活性。

核心是用抽象类定好执行顺序,把变化的部分抽成抽象方法,让子类只管填空,不碰流程。
明确算法骨架,封装在模板方法中
在抽象类里写一个具体方法(通常设为 final),按固定顺序调用多个步骤。这个方法就是“模板方法”,它不实现细节,只规定“先做什么、再做什么、最后做什么”。比如制作饮品的流程:烧水 → 冲泡 → 倒入杯 → 加调料。这四步顺序不能乱,就全写在 prepare() 里。
把可变步骤声明为抽象方法
骨架中哪些环节因子类而异,就提取出来,用 @abstractmethod(Python)或 abstract(Java)标记。这些方法没有实现,强制子类必须重写。例如 brew() 和 addCondiments() 就是抽象的——咖啡和茶的冲泡方式不同,加的料也不同,但父类不管具体怎么写,只负责在流程里调用它们。
提供可选钩子方法,增强灵活性
有些步骤可能多数情况一样,少数子类需要微调。这时可以定义带默认实现的方法,比如 hook() 或 isVegan(),子类按需覆盖。它不是必须重写的,但能成为扩展点。比如默认加奶,素食者子类可覆盖该钩子返回 False,跳过加奶步骤。
子类只专注实现,不改动流程
子类继承抽象类后,只需补全所有抽象方法,其他一概不动。它不能重写模板方法(因为是 final),也不能打乱调用顺序。这样既保证所有子类走同一套逻辑路径,又允许各自定制关键环节。新增一种饮品,只要新建一个子类、实现两个抽象方法即可,原有代码零修改。

















