一.名称
二.问题(为了解决什么问题)
- 对一些复杂的算法进行分割
- 各个子类中公共的行为应该被提取出来并集中到一个公共父类中以避免代码重复。
- 需要通过子类来决定父类算法中某个步骤是否执行,实现子类对父类的反向控制。
三.解决方案(主要体现在uml和核心代码上)
模板方法模式是基于继承的代码复用技术。定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义改算法的某些特定步骤。区分基本方法和模板方法。
主要体现了依赖倒置,里氏替换,开闭原则。这主要做的也是增加了一层实现了解耦和复用。
抽象类和继承——依赖倒置
抽象类——开闭原则
抽象类——里氏替换原则
模板方法模式经常和其他设计模式混用。
四.例子
简单,略,具体可见github设计模式部分demo。
四.效果(有啥优缺点)
优点:
1. 是一种代码复用技术,在类库的设计中非常常见,它鼓励恰当使用继承来实现代码复用。
2. 模板方法模式可实现一种反向控制结构,通过子类覆盖父类的钩子方法来决定某一特定步骤是否需要执行。
常见案例
银行利息计算模块。