模板方法模式定义
模板方法模式,英文名Template Method Pattern,又叫模板模式,是一种行为型模式。
模板方法模式:定义一个操作中的算法骨架,将进一步实现的步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定的步骤。
模板方法模式优缺点
模板方法模式优点
- 共用部分方法实现代码复用;
- 行为由父类控制、实现子类控制;
- 符合开闭原则
模板方法模式缺点:
- 每实现一个不同的需求就会增加一个子类,这样会导致类的个数增加,增加系统复杂度;
- 需要开发人员花费更多的时间去整理和清理其中的关系;
模板方法模式角色
1.抽象模板(Abstract Class)角色
抽象模板类:负责给出一个算法的轮廓和骨架,它由一个模板方法和若干个基本方法构成。
2.具体实现(Concrete Class)角色
具体实现类:它是抽象类的子类,用于实现在父类中声明的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中已经实现的具体基本操作。
模板方法模式案例
通过上面的介绍对模板方法模式有了一定的认识,下面通过一个案例来加深理解。
编写豆浆的案例,大致流程为3步:选材 1.添加配料 + 2.浸泡+3放在豆浆机打碎。
示例如下:
1.定义模板类
/** * 抽象类表示豆浆 */ public abstract class SoyaMilk { //模板方法make ,一般设置成final ,不让子类去覆盖 final void make(){ select(); if (customerChoose()){ addCondiments(); } soak(); beat(); } //选材料 void select(){ System.out.println("第一步,选择大豆"); } //添加不同配料,抽象方法,具体有子类去实现 abstract void addCondiments(); //浸泡, void soak(){ System.out.println("第三步,黄豆和配料开始浸泡 ,需要3个小时"); } void beat(){ System.out.println("第四步 ,黄豆和配料打碎"); } }
2.定义子类
public class RedBeanMilk extends SoyaMilk{ @Override void addCondiments() { System.out.println("加入上好的黄豆"); } }
3.调用方法
public class Client { public static void main(String[] args) { System.out.println("制作红豆豆浆"); SoyaMilk redBeanSoyaMilk = new RedBeanMilk(); redBeanSoyaMilk.make(); } }
模板方法模式应用
- 多个子类有共同的方法,且逻辑基本相同
- 可以把核心的算法和重要的功能设计为模板方法,子类去实现相关细节功能
- 系统在进行重构或者是功能优化的时候可以将子类重复的代码抽离到父类中
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》