zoukankan      html  css  js  c++  java
  • 《图解设计模式》读书笔记2-1 Template Method模式

    模板方法模式

    在父类中定义流程,在子类中实现具体的方法。

    类图

    代码

    //抽象类
    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();
        }
    }
    //具体类1
    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(">>");
        }
    }
    
    //具体类2
    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();
        }
        @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("+");
        }
    }
    
    public static void main(String[] args) {
            AbstractDisplay adc = new CharDisplay('C');
            AbstractDisplay ads = new StringDisplay("HelloWorld");
    
            adc.display();
            ads.display();
    }
    
    //输出结果
    << CCCCC >>
    +----------+
    |HelloWorld|
    |HelloWorld|
    |HelloWorld|
    |HelloWorld|
    |HelloWorld|
    +----------+
    

    思想:

    • 如果我们要用很多的类去实现相似的业务逻辑,可以将方法的流程抽取出来放到基类的模板方法。如果流程有变化,或者有bug,就不用逐个修改具体类,只用修改基类的模板方法即可。

    • 在该模式中,子类和基类是紧密相连,共同工作的。子类实现基类的抽象方法时,必须要理解这些抽象方法调用的时机才能编写出合适的代码。

    • 同样的类型,调用同样的方法,表现不同,体现了多态

  • 相关阅读:
    SonarQube+Jenkins代码审查集成CI/CD
    “拒绝了对对象'aspnet_CheckSchemaVersion'的 EXECUTE 权限”之解决
    ORA-31687: error creating worker process with worker id 1
    Oracle修改表列长度
    RouYi(Export excel)
    Spring事务失效的原因
    Linux/Keychron键盘 功能键F1-F12映射修复
    git 推送本地文件到远程仓库
    git remote 删除已添加的远程仓库地址
    mssql新建数据库
  • 原文地址:https://www.cnblogs.com/qianbixin/p/10992870.html
Copyright © 2011-2022 走看看