zoukankan      html  css  js  c++  java
  • 模板模式

      在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行

      场景:总部设计的宝马车的模型模板,由各个分厂去根据抽象方法实现不同的车型,比如车的启动有多种不同实现,车的喇叭系统有多种不同实现,车的导航和自动停车可以有多种不同实现

         但最终一辆车的运作,是以启动——鸣笛注意——导航——停车的固定流程去走的,所以需要严格按照宝马规定的流程来走

      抽象模板类:

    /**
     * 场景:总部设计的宝马车的模型模板
     * 由各个分厂去根据抽象方法实现不同的车型
     * @author test11
     */
    public abstract class BMWTemplate {
    
        /**
         * 车的启动程序
         */
        public abstract void start();
    
        /**
         * 车的喇叭系统
         */
        public abstract void alarm();
    
        /**
         * 车的导航系统
         */
        public abstract void guide();
    
        /**
         * 停车
         */
        public abstract void stop();
    
    
        /**
         * 每辆上路跑的汽车,流程上是一样的,所以固化为模板
         */
        public void run(){
            this.start();
    
            this.alarm();
    
            this.guide();
    
            this.stop();
        }
    
    }

      模板的实现BMWCar1

    /**
     * 基于总部提供的模板实现的BMWCar1
     * @author test11
     */
    public class BMWCar1 extends BMWTemplate{
    
        @Override
        public void start() {
            System.out.println("BMWCar1启动");
        }
    
        @Override
        public void alarm() {
            System.out.println("BMWCar1鸣笛");
        }
    
        @Override
        public void guide() {
            System.out.println("BMWCar1导航");
        }
    
        @Override
        public void stop() {
            System.out.println("BMWCar1停车");
        }
    }

      模板的实现BMWCar2

    /**
     * 基于总部提供的模板实现的BMWCar2
     * @author test11
     */
    public class BMWCar2 extends BMWTemplate{
    
        @Override
        public void start() {
            System.out.println("BMWCar2启动");
        }
    
        @Override
        public void alarm() {
            System.out.println("BMWCar2鸣笛");
        }
    
        @Override
        public void guide() {
            System.out.println("BMWCar2导航");
        }
    
        @Override
        public void stop() {
            System.out.println("BMWCar2停车");
        }
    }

      模板模式用户测试

    /**
     * 模板模式测试
     * @author test11
     */
    public class Demo {
    
        public static void main(String[] args) {
            //车型1测试
            BMWCar1 car1 = new BMWCar1();
            car1.run();
    
    
            //车型2测试
            BMWCar2 car2 = new BMWCar2();
            car2.run();
        }
    }
  • 相关阅读:
    【瞎口胡】基础数学 1 快速幂 整除 最大公约数
    【瞎口胡】二分图
    Windos下使用Redis
    VUE的踩坑日记(1)
    公告
    [维度打击]最大连续子序列
    常用函数
    树状数组
    高精度封装
    T4 模板之 单个文件
  • 原文地址:https://www.cnblogs.com/jiyukai/p/14786252.html
Copyright © 2011-2022 走看看