首先引入痛点: 重复代码, 包括字面上的重复, 或者是逻辑层面上的重复(比如功能).
故需要时刻记住: DRY. Don't Repeat Yourself.
模板方法, 就是为了解决重复代码问题而出现的.
1 简介
在 OOP 中, 重用代码的一个基本手段就是继承, 以及组合.
利用继承的方式, 可以把相同的逻辑放到父类中, 子类实现自己特定的功能即可.
而在某些情况下, 父类往往对外提供接口, 隐藏子类细节. 而接口的实现就可以针对不同的子类有不同的实现.
若在父类中定义了一个方法, 这个方法来决定算法的执行结构, 而具体的算法实现根据不同的子类有所不同, 这样的方法就是模板方法.
也即: 动作执行流程不变, 但流程中的组成细节是根据不同的子类有所不同.
利用模板方法的时候, 过渡地添加子类会造成子类泛滥问题. 故有时可以利用回调来替换掉子类实现. 比如执行流程中的某个子动作是根据不同子类有所不同, 则可以把这个动作利用回调暴露给外界去处理.
2 意图
实际介绍上面的内容, 仅为引出一个道理: 人总是需要站在一个更高的角度来看问题, 才能不断提高, 否则一个人琢磨再多, 可能也只是前人解决过的无数问题中的一个.
故学习设计模式之前, 先来完整了解一下所谓的 "6 大设计原则", 设计模式就是依据这些总体原则构造出来的:
- 单一职责原则 (SRP)
- 里式替换原则 ()
- 依赖倒置原则 (IOC)
- 接口隔离原则 ()
- 迪米特法则 ()
- 开放封闭原则 (OCP)