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();
        }
    }
  • 相关阅读:
    pom.xml基础配置
    Maven零散笔记——配置Nexus
    搭建局域网maven仓库
    java 加密解密
    菠萝大象--sping
    (转)Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义
    eclipse 如何把java项目转成web项目
    Effective Java
    More Effective C++
    Effective C++
  • 原文地址:https://www.cnblogs.com/jiyukai/p/14786252.html
Copyright © 2011-2022 走看看