设计模式 — 模板模式
实现形式:抽象类定义了执行的方法(方法包含若干步骤),具体的步骤由子类重写实现。
使用场景:
- 有多个子类共同的步骤方法
- 有重要的、复杂的共用方法
代码实例:
代码场景:需要定义一个吃饭的模板,不管男人还是女人都要按照指定模板步骤进行吃饭。步骤为拿碗、吃饭、洗碗。
抽象模板类:AbstractEat
/** * 吃饭 抽象类 * @author GaoYuan * @date 2018/11/11 下午7:21 */ public abstract class AbstractEat { /** 定义了吃饭的步骤(模板) */ public final void eat(){ getBowl(); startEat(); washBowl(); } /** 拿碗 */ abstract void getBowl(); /** 吃饭 */ abstract void startEat(); /** 洗碗 */ abstract void washBowl(); }
具体实现子类 ManEat、WomanEat
/** * 男人吃饭 * @author GaoYuan * @date 2018/11/11 下午7:21 */ public class ManEat extends AbstractEat{ @Override void getBowl() { System.out.println("ManEat getBowl()"); } @Override void startEat() { System.out.println("ManEat startEat()"); } @Override void washBowl() { System.out.println("ManEat washBowl()"); } } /** * 女人吃饭 * @author GaoYuan * @date 2018/11/11 下午7:21 */ public class WomanEat extends AbstractEat{ @Override void getBowl() { System.out.println("WomanEat getBowl()"); } @Override void startEat() { System.out.println("WomanEat startEat()"); } @Override void washBowl() { System.out.println("WomanEat washBowl()"); } }
测试
public static void main(String[] args){ // 男人吃饭 AbstractEat eat = new ManEat(); eat.eat(); // 女人吃饭 eat = new WomanEat(); eat.eat(); }
结果输出:
ManEat getBowl()
ManEat startEat()
ManEat washBowl()
WomanEat getBowl()
WomanEat startEat()
WomanEat washBowl()
转自:https://www.liangzl.com/get-article-detail-29577.html