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 加适当调料

    收藏文章数量从多到少与“把书读薄”是一个道理
  • 相关阅读:
    多线程
    python 面向对象
    selenium 安装 以及相关环境
    pyquery 库的方法
    Python 面向对象的补充
    python 面向对象
    想造轮子的时候,ctrl+f一下
    C#三层开发做学生管理系统
    C# 我是个传奇的 using
    啦啦啦 啦啦 啦 啦 啦 啦啦 啦 啦 啦
  • 原文地址:https://www.cnblogs.com/use-D/p/9757359.html
Copyright © 2011-2022 走看看