• 图解设计模式-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|
    +-----+
    收藏文章数量从多到少与“把书读薄”是一个道理
  • 相关阅读:
    线程池:
    C#:实现托盘
    Linux内核 TCP/IP、Socket参数调优
    redis配置文件redis.conf参数说明
    redis安装与参数说明
    巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度。
    mkdir:批量创建文件夹
    linux下的shell运算(加、减、乘、除)
    Linux查看文件编码格式及文件编码转换
    解决vi/vim中粘贴会在行首多很多缩进和空格的问题
  • 原文地址:https://www.cnblogs.com/use-D/p/9557722.html
Copyright © 2020-2023  润新知