zoukankan      html  css  js  c++  java
  • java设计模式(三)模板模式

      抽象类中公开定义了执行它的方法的方式,子类可以按需求重写方法实现,但调用将以抽象类中定义的方式进行,典型应用如银行办理业务流程、冲泡饮料流程。下面给出简单例子,用沸水冲泡饮料,分为四步:将水煮沸、泡制饮料、将饮料倒入杯中、加入调味料。

    1、模板抽象类

      要点:1)抽象类  2)final修饰的模板方法

    public abstract class RefreshTemplate {
    
        public final void refresh() {
            //将水煮沸
            biolWater();
            //炮制饮料
            brew();
            //将饮料倒入杯中
            pourInCup();
            //加入调味料
            addCondiments();
    
        }
    
        private void biolWater() {
            System.out.println("将水煮沸");
        }
    
        protected abstract void brew();
    
        private void pourInCup() {
            System.out.println("将饮料倒入杯中");
        }
    
        protected abstract void addCondiments();
    
    }

    2、咖啡类,继承模板类,重写冲泡、加调味料方法

    public class Coffee extends RefreshTemplate {
        protected void brew() {
            System.out.println("用沸水冲泡咖啡");
        }
    
        protected void addCondiments() {
            System.out.println("向咖啡中加入牛奶和糖");
        }
    }

    3、茶类,继承模板类,重写冲泡、加调味料方法

    public class Tea extends RefreshTemplate {
        protected void brew() {
            System.out.println("用开水浸泡5分钟");
        }
    
        protected void addCondiments() {
            System.out.println("加入柠檬");
        }
    }

    4、测试

    public class Model {
    
        public static void main(String[] args) {
            //RefreshTemplate refresh = new Coffee();
            RefreshTemplate refresh = new Tea();
            refresh.refresh();
        }
    
    }

    利用Java的动态绑定(向上转型),调用父类的final模板方法,保证执行按抽象类定义的方式进行。

    代码:https://github.com/shaoyesun/jdk_test.git

  • 相关阅读:
    HeadFirst Ruby 第七章总结 references
    《HTTP 权威指南》笔记:第三章 HTTP 报文
    HTTP 权威指南 第二章 URL 与资源
    HeadFIrst Ruby 第七章总结 hashes
    HeadFIrst Ruby 第六章总结 block return values
    面向对象的面试题
    属性,类方法,静态方法,Python2和3方法
    类的抽象类接口类,多态封装
    类的继承
    面向对象空间和组合
  • 原文地址:https://www.cnblogs.com/sunjf/p/java_template.html
Copyright © 2011-2022 走看看