zoukankan      html  css  js  c++  java
  • 图解设计模式-Template Method模式

    父类中定义处理流程,子类中实现具体处理的模式称为Template Method模式
    优点:
    可以保持逻辑处理通用化(父类中定义处理流程)
    父类与子类之间协作(子类实现父类的抽象方法)
    父类与子类保持一致性(子类继承父类)
    延伸:
    子类可以使用父类的方法
    可以通过子类增加方法以实现新功能
    子类重写父类的方法可以改变程序的行为
     
    角色:
    AbstractClass抽象类:负责实现模块方法,还负责声明在模板方法中所使用到的抽象方法,这些抽象方法由子类负责实现。
    ConcreteClass具体类:实现具体的抽象方法。
     
    public abstract class AbstractDisplay {
    
        public abstract void open();
    
        public abstract void print();
    
        public abstract void close();
    
        public final void display() {
            open();
            for(int i=0;i<5;i++) {
                print();
            }
            close();
        }
    }
    public class CharDisplay extends AbstractDisplay {
        @Override
        public void open() {
            System.out.println("CharDisplay open");
        }
    
        @Override
        public void print() {
            System.out.println("CharDisplay print");
        }
    
        @Override
        public void close() {
            System.out.println("CharDisplay close");
        }
    }
    public class StringDisplay extends AbstractDisplay {
    
        private String string;
        private int width;
    
        public StringDisplay(String string,int width) {
            this.string=string;
            this.width=width;
        }
        @Override
        public void open() {
            printLine();
        }
    
        @Override
        public void print() {
            System.out.println("|" +string+"|");
        }
    
        @Override
        public void close() {
            printLine();
        }
    
        private void printLine() {
            System.out.print("+");
            for(int i=0;i<width;i++) {
                System.out.print("-");
            }
            System.out.println("+");
        }
    }
    ublic class Main {
        public static void main(String[] args) {
            AbstractDisplay charDisplay = new CharDisplay();
            charDisplay.display();
            AbstractDisplay stringDisplay = new StringDisplay("testname",5);
            stringDisplay.display();
        }
    }
    结果:
    CharDisplay open
    CharDisplay print
    CharDisplay print
    CharDisplay print
    CharDisplay print
    CharDisplay print
    CharDisplay close
    +-----+
    |testname|
    |testname|
    |testname|
    |testname|
    |testname|
    +-----+
    收藏文章数量从多到少与“把书读薄”是一个道理
  • 相关阅读:
    Cypress web自动化18-cypress.json文件配置baseUrl
    Linux学习29-awk提取log日志信息,统计日志里面ip访问次数排序
    docker学习14-配置 docker 阿里云/腾讯云加速器
    Cypress web自动化17-fixture加载json文件数据
    Cypress web自动化16-参数化,数据驱动测试案例
    Cypress web自动化15-Hooks使用方法
    Cypress web自动化14-window窗口属性
    Cypress web自动化13-viewport设置不同分辨率,适配不同设备,手机型号
    Cypress web自动化12-父子元素定位
    Eclipse安装scala
  • 原文地址:https://www.cnblogs.com/use-D/p/9557722.html
Copyright © 2011-2022 走看看