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();
        }
    }
  • 相关阅读:
    vmware ubuntu 异常关机无法连接到网络
    Speed up GCC link
    常用的一些解压命令
    Log4j 漏洞复现
    Test Case Design method Boundary value analysis and Equivalence partitioning
    CCA (Citrix Certified Administrator) exam of “Implementing Citrix XenDesktop 4”
    What is Key Word driven Testing?
    SAP AGS面试小结
    腾讯2013终端实习生一面
    指针的引用
  • 原文地址:https://www.cnblogs.com/jiyukai/p/14786252.html
Copyright © 2011-2022 走看看