zoukankan      html  css  js  c++  java
  • 设计模式之模板方法模式

    场景引入

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

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

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

    模板类代码实现:

    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...

    附上图片:

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

  • 相关阅读:
    MyBatis学习(五)resultMap测试
    MyBatis学习(四)XML配置文件之SQL映射的XML文件
    Mybatis学习(三)XML配置文件之mybatis-config.xml
    每次回顾,总会有一点小收获!
    php数组去重、魔术方法、redis常用数据结构及应用场景
    MySQL使用可重复读作为默认隔离级别的原因
    后端程序猿标配之linux命令
    常用字符串函数
    nginx配置隐藏index.php
    MySQL的sql_mode解析与设置
  • 原文地址:https://www.cnblogs.com/zjting/p/11390278.html
Copyright © 2011-2022 走看看