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|
    +-----+
    收藏文章数量从多到少与“把书读薄”是一个道理
  • 相关阅读:
    DIV+CSS—菜鸟分享学习心得!入门篇
    有关 JavaScript 的 10 件让人费解的事情
    [论离职]走的人不少,来的人更多
    面朝电脑,春暖花开
    职场小说:《米亚快跑》PDF版下载
    flex和html的对比
    10个可以简化开发过程的MySQL工具
    转:大型网站架构不得不考虑的10个问题
    怎样善用色彩层次?40个精彩站点给你灵感
    50个令人耳目一新的网页纹理设计
  • 原文地址:https://www.cnblogs.com/use-D/p/9557722.html
Copyright © 2011-2022 走看看