• 模板模式


      在模板模式(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();
        }
    }
  • 相关阅读:
    Node
    HTTP权威指南
    一些乱七八糟的思考积累
    有限状态机
    奇怪问题引用到其它文件夹项目文件方法
    dijkstra+堆优化
    高精度
    BUAA 1301 最短路
    阿里云服务器ECS(Centos8)下安装和配置python3.8
    Cheat Sheet
  • 原文地址:https://www.cnblogs.com/jiyukai/p/14786252.html
Copyright © 2020-2023  润新知