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();
        }
    }
  • 相关阅读:
    LeetCode153 Find Minimum in Rotated Sorted Array. LeetCode162 Find Peak Element
    LeetCode208 Implement Trie (Prefix Tree). LeetCode211 Add and Search Word
    LeetCode172 Factorial Trailing Zeroes. LeetCode258 Add Digits. LeetCode268 Missing Number
    LeetCode191 Number of 1 Bits. LeetCode231 Power of Two. LeetCode342 Power of Four
    LeetCode225 Implement Stack using Queues
    LeetCode150 Evaluate Reverse Polish Notation
    LeetCode125 Valid Palindrome
    LeetCode128 Longest Consecutive Sequence
    LeetCode124 Binary Tree Maximum Path Sum
    LeetCode123 Best Time to Buy and Sell Stock III
  • 原文地址:https://www.cnblogs.com/jiyukai/p/14786252.html
Copyright © 2011-2022 走看看