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,就不用逐个修改具体类,只用修改基类的模板方法即可。

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

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

  • 相关阅读:
    linux软件相关基操--基于Debian
    Spring AOP实现接口调用异常时重试
    Kafka
    zookeeper集群
    zookeeper客户端之curator
    zk权限模块
    zookeeper简介及基操
    CustomTool
    SpringBoot+Mybatis配置多数据源,分包方式
    mysql操作相关错误解决办法
  • 原文地址:https://www.cnblogs.com/qianbixin/p/10992870.html
Copyright © 2011-2022 走看看