码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之-模板方法模式

时间:2019-08-22 10:42:35      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:template   coff   one   extend   private   方法   png   ==   测试结果   

场景引入

  小镇上新凯乐一家咖啡厅,咖啡师的逻辑:烧水 -> 冲咖啡 ->将饮品倒进杯子里 -> 加糖或者牛奶等。

后来,店家发现人们还有一部分热衷于喝茶,这时客串的咖啡师:烧水 -> 泡茶叶 ->将饮品倒进杯子里 -> 加辅料等。

我们可以清晰的发现:烧水、将饮品倒进杯子的实现是一样的,并且操作的顺序基本都是一样的。只是冲饮料、加辅料的过程需要定制化。

模板类代码实现:

技术图片
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();
    }
}
View Code

茶类代码实现:

技术图片
class Tea extends Template{
    @Override
    void cook(){
      System.out.println("cook tea....");  
    }
    
     @Override
    void addSth(){
      System.out.println("add milk into tea...");  
    }
}
View Code

咖啡类代码实现:

技术图片
class Coffee extends Template{
    @Override
    void cook(){
      System.out.println("cook coffee....");  
    }
    
     @Override
    void addSth(){
      System.out.println("add milk into coffee...");  
    }
}
View Code

测试类:

技术图片
public class Test{
    public static void main(String[] args){
        new Tea().doSth();
        System.out.println("===============");
        new Coffee().doSth();
    }
}
View Code

测试结果:

boil water...
cook tea....
dump water into cup...
add milk into tea...
===============
boil water...
cook coffee....
dump water into cup...
add milk into coffee...

附上图片:

技术图片

 由以上可知,创建一个模板类,实现主要的流程,子类进行复用,其他具体的类进行继承,实现定制化功能!

设计模式之-模板方法模式

标签:template   coff   one   extend   private   方法   png   ==   测试结果   

原文地址:https://www.cnblogs.com/zjting/p/11390278.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!