zoukankan      html  css  js  c++  java
  • 8、模板方法模式

    模板方法模式定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法是的子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
    • 模板方法定义了算法的实现步骤,把这些步骤放在子类中实现;
    • 模板方法为我们提供了代码复用的重要技术;
    • 模板方法的抽象类可以定义具体方法;
    • 抽象方法由子类实现;
    • 钩子方法在抽闲类中不做任何事,或者只做默认的事,子类可以选择要不要覆盖钩子方法;
    • 为了防止子类改变模板方法,可以将模板方法为final;
    • 策略模式和模板方法模式都是封装算法,一个用组合方式,后一个用继承方式;
    定义模板抽象类,其中prepare方法定义了模板的执行顺序,子类可以实现各自的方法,但是必须使用prepare模板方法执行;
    public abstract class CoffeineBeverage {
        /**
         * 定义各个方法的执行顺序
         */
        final void prepare() {
            boilWater();
            brew();
            pourInCup();
            addCondiments();
        }
    
        /**
         *把水煮沸
         */
        public abstract void boilWater();
    
        /**
         * 用水冲
         */
        public abstract void brew();
    
        /**
         *把饮料倒入杯中
         */
        public void pourInCup() {
            System.out.println("把饮料倒入杯中");
        };
    
        /**
         *加适当调料
         */
        public abstract void addCondiments();
    }
    茶类,继承CoffeineBeverage类,实现prepare模板方法中定义的具体步骤方法;
    public class Tea extends CoffeineBeverage {
        @Override
        public void boilWater() {
            System.out.println("Tea 把水煮沸");
        }
    
        @Override
        public void brew() {
            System.out.println("Tea 用水冲");
        }
    
        @Override
        public void addCondiments() {
            System.out.println("Tea 加适当调料");
        }
    }
    咖啡类,继承CoffeineBeverage类,实现prepare模板方法中定义的具体步骤方法;
    public class Coffee extends CoffeineBeverage {
        @Override
        public void boilWater() {
            System.out.println("Coffee 把水煮沸");
        }
    
        @Override
        public void brew() {
            System.out.println("Coffee 用水冲");
        }
    
        @Override
        public void addCondiments() {
            System.out.println("Coffee 加适当调料");
        }
    }
    测试类:
    public class Test {
        public static void main(String[] args){
            CoffeineBeverage tea = new Tea();
            tea.prepare();
            CoffeineBeverage coffee = new Coffee();
            coffee.prepare();
        }
    }

    执行结果:

    Tea 把水煮沸
    Tea 用水冲
    把饮料倒入杯中
    Tea 加适当调料


    Coffee 把水煮沸
    Coffee 用水冲
    把饮料倒入杯中
    Coffee 加适当调料

    收藏文章数量从多到少与“把书读薄”是一个道理
  • 相关阅读:
    一、逻辑架构与存储引擎
    三、动态SQL
    九、装饰者模式
    二、Mapper映射文件
    八、适配器模式
    测试开发系列之Python开发mock接口(二)
    测试开发系列之Python开发mock接口(三)
    html基础
    seleniumWebdriver浏览器驱动信息汇总
    用30行代码开发一个上传、下载文件的接口
  • 原文地址:https://www.cnblogs.com/use-D/p/9757359.html
Copyright © 2011-2022 走看看