zoukankan      html  css  js  c++  java
  • TemplateMethod模式(设计模式)

    这个模式最大的特点:在父类中定义处理流程的框架,在子类中实现具体处理。这句话的意思就是父类只定义如何调用这些方法,但是具体怎么处理实现不同的问题是由子类实现的。该模式具有模板功能。

    优点:可以让逻辑处理通用化,将子类共同的流程化步骤通过父类定义好流程算法,子类只需要完成自己具体化操作部分。

    使用思考:
    ​   如何划分处理的级别,哪些处理需要由父类完成,哪些处理需要交给子类负责?
    ​   父类实现的方法太多可以让子类变的轻松,但是也降低了子类灵活性;反之父类定义的方法过少,子类会变的臃肿不堪,代码重复
    Template Method模式.png
    小案例
    AbstractDisplay.java

    /**
     * @Author:DarknessShadow
     * @description:模板父类
     * @date 2020/5/11 9:46
     */
    public abstract class AbstractDisplay {
        public abstract void open();
        public abstract void print();
        public abstract void close();
        public void display(){
            open();
            for (int i = 0; i < 5; i++) {
                print();
            }
            close();
        }
    }
    

    CharDisplay.java

    /**
     * @Author:DarknessShadow
     * @description:模板子类
     * @date 2020/5/11 9:48
     */
    public class CharDisplay extends AbstractDisplay{
        private char ch;
    
        public CharDisplay(char ch) {
            this.ch = ch;
        }
    
        @Override
        public void open() {
            System.out.print("<<");
        }
    
        @Override
        public void print() {
            System.out.print(ch);
        }
    
        @Override
        public void close() {
            System.out.println(">>");
        }
    }
    

    StringDisplay.java

    /**
     * @Author:DarknessShadow
     * @description:模板子类
     * @date 2020/5/11 9:49
     */
    public class StringDisplay extends AbstractDisplay {
    
        private String string;
        private int width;
    
        public StringDisplay(String string) {
            this.string = string;
            this.width = string.getBytes().length;
        }
    
        @Override
        public void open() {
            printLine();
        }
        private void printLine() {
            System.out.print("+");
            for (int i = 0; i < width; i++) {
                System.out.print("-");
            }
            System.out.println("+");
        }
    
        @Override
        public void print() {
            System.out.println("|" + string  +"|");
        }
    
        @Override
        public void close() {
            printLine();
        }
    }
    

    Main.java

    /**
     * @Author:DarknessShadow
     * @description:主测试类
     * @date 2020/5/11 9:53
     */
    public class Main {
        public static void main(String[] args) {
            AbstractDisplay d1 = new CharDisplay('H');
            AbstractDisplay d2 = new StringDisplay("Hello,World.");
            AbstractDisplay d3 = new StringDisplay("你好,世界。");
            d1.display();
            d2.display();
            d3.display();
        }
    }
    
  • 相关阅读:
    Linux磁盘分区MBR分区
    win10 1809磁盘占用总是100%
    LINUX系统的7种运行级别
    【工作环境】公司主域控硬盘损坏后的维修步骤
    程序员的一些人生感悟
    dispatch_get_main_queue 的同步异步问题
    虚拟机VirtualBox中Ubuntu无法全屏解决方法
    十大报错、报异常、跑不起来原因
    关于scrollbarfacecolor只支持ie的解决方法
    一个严肃的面试经验
  • 原文地址:https://www.cnblogs.com/myfaith-feng/p/12867761.html
Copyright © 2011-2022 走看看