1、介绍
模版方法模式的思想是在抽象类中定义程序的主体框架,在子类中实现具体的细节,是一种行为型设计模式。
实现:模版方法模式中存在两个角色,抽象类和实现类。在抽象类中,定义了程序的主体结构或者流程,该方法可以设置成final的,这样子类中就无法重写。而对于其他的细节的方法定义,则延迟到实现类中。
使用场景:
- 比如做饭,都需要开火,架锅,放入食材这样一套的主体流程,这个可以放在抽象类中。但是开多大的火,使用哪种锅,放入什么食材,则放在子类中,因为每种菜品的的制作方法都不一样。
- 比如吃饭。都要先洗手,拿餐具,吃饭。主体流程都是统一的。但是用什么东西洗手,使用什么餐具吃饭,吃什么饭,都是存在多种情况的。
2、案例
以每天的生活工作为例。主体框架就是,吃早饭,上班,吃午饭,上班,吃晚饭。具体实现的细节包含三餐吃什么,上班做什么。
2.2、实现
抽象类
public abstract class Life { abstract void makeBreakfast(); abstract void makeLunch(); abstract void makeDinner(); abstract void MorningWork(); abstract void AfternoonWork(); public final void live() { makeBreakfast(); MorningWork(); makeLunch(); AfternoonWork(); makeDinner(); } }
子类
public class Chairman extends Life { @Override void makeBreakfast() { System.out.println("早餐:吃西餐"); } @Override void makeLunch() { System.out.println("午餐:吃日本料理"); } @Override void makeDinner() { System.out.println("晚餐:吃满汉全席"); } @Override void MorningWork() { System.out.println("上午工作:处理公司内部事务"); } @Override void AfternoonWork() { System.out.println("下午工作:处理公司外部公关"); } }
public class Programmer extends Life { @Override void makeBreakfast() { System.out.println("早餐:肯德基"); } @Override void makeLunch() { System.out.println("午餐:麦当劳"); } @Override void makeDinner() { System.out.println("晚餐:德克士"); } @Override void MorningWork() { System.out.println("上午工作:写程序"); } @Override void AfternoonWork() { System.out.println("下午工作:调试程序"); } }
验证程序
public class Demo { public static void main(String[] args) { Programmer programmer = new Programmer(); programmer.live(); System.out.println(""); Chairman chairman = new Chairman(); chairman.live(); } }
运行结果
早餐:肯德基
上午工作:写程序
午餐:麦当劳
下午工作:调试程序
晚餐:德克士早餐:吃西餐
上午工作:处理公司内部事务
午餐:吃日本料理
下午工作:处理公司外部公关
晚餐:吃满汉全席Process finished with exit code 0
3、总结
优点:将不变的主体部分提取到抽象类中,作为模版方法,便于维护