场景引入
小镇上新凯乐一家咖啡厅,咖啡师的逻辑:烧水 -> 冲咖啡 ->将饮品倒进杯子里 -> 加糖或者牛奶等。
后来,店家发现人们还有一部分热衷于喝茶,这时客串的咖啡师:烧水 -> 泡茶叶 ->将饮品倒进杯子里 -> 加辅料等。
我们可以清晰的发现:烧水、将饮品倒进杯子的实现是一样的,并且操作的顺序基本都是一样的。只是冲饮料、加辅料的过程需要定制化。
模板类代码实现:
abstract class Template{ //烧水 private void boilWater(){ System.out.println("boil water..."); } //倒水 private void dumpWater(){ System.out.println("dump water into cup..."); } //模板方法 //煮咖啡|茶叶等 abstract void cook(); //添加辅料等 abstract void addSth(); //业务流程 public void doSth(){ boilWater(); cook(); dumpWater(); addSth(); } }
茶类代码实现:
class Tea extends Template{ @Override void cook(){ System.out.println("cook tea...."); } @Override void addSth(){ System.out.println("add milk into tea..."); } }
咖啡类代码实现:
class Coffee extends Template{ @Override void cook(){ System.out.println("cook coffee...."); } @Override void addSth(){ System.out.println("add milk into coffee..."); } }
测试类:
public class Test{ public static void main(String[] args){ new Tea().doSth(); System.out.println("==============="); new Coffee().doSth(); } }
测试结果:
boil water... cook tea.... dump water into cup... add milk into tea... =============== boil water... cook coffee.... dump water into cup... add milk into coffee...
附上图片:
由以上可知,创建一个模板类,实现主要的流程,子类进行复用,其他具体的类进行继承,实现定制化功能!