zoukankan      html  css  js  c++  java
  • 设计模式——模板方法模式

    模板方法模式就是在父(基)类定义模板(流程),而具体的处理环节交给子类来实现

    /**
     * @author maikec
     * @date 2019/5/10
     */
    public abstract class AbstractDisplay {
        private final Integer PRINT_COUNT =5;
        /**
         * 打开操作
         */
        protected abstract void open();
    
        /**
         * 打印操作
         */
        protected abstract void print();
    
        /**
         * 关闭操作
         */
        protected abstract void close();
         /**
         * 定义模板
         */
        public final void display(){
            open();
            for (int i = 0; i < PRINT_COUNT; i++) {
                print();
            }
            close();
        }
    }
    
    /**
     * @author maikec
     * @date 2019/5/10
     */
    public class CharDisplay extends AbstractDisplay {
        private final Character aChar;
        public CharDisplay(Character aChar){
            if (null == aChar){
                throw new IllegalArgumentException( "Character cannot be null" );
            }
            this.aChar = aChar;
        }
        @Override
        public void open() {
            System.out.println( "Open Char " );
        }
    
        @Override
        public void print() {
            System.out.println( aChar.charValue() );
        }
    
        @Override
        public void close() {
            System.out.println( "Close Char" );
        }
    }
    
    /**
     * @author maikec
     * @date 2019/5/10
     */
    public class StringDisplay extends AbstractDisplay {
        private final String string ;
        public StringDisplay(String string){
            if (null == string){
                throw new IllegalArgumentException( "String cannot be null" );
            }
            this.string = string;
        }
        @Override
        public void open() {
            System.out.println( "Open String" );
        }
    
        @Override
        public void print() {
            System.out.println( string );
        }
    
        @Override
        public void close() {
            System.out.println( "Close String" );
        }
    }
    
    /**
     * @author maikec
     * @date 2019/5/10
     */
    public class TemplateDemo {
        public static void main(String[] args) {
            AbstractDisplay display = new CharDisplay( '*' );
            display.display();
    
            AbstractDisplay stringDisplay = new StringDisplay( "Hi" );
            stringDisplay.display();
        }
    }

    附录

    github.com/maikec/patt… 个人GitHub设计模式案例

    声明

    引用该文档请注明出处

  • 相关阅读:
    IIS禁止xml文件访问
    微信三方授权域名问题
    微信公众号接收推送
    微信菜单保存
    微信三方授权 二维码获取问题 以及网页显示问题
    控制input框的内容输入为数字
    select 相关 获取当前项以及option js选定
    子窗口调用父窗口方法
    免费在线的web性能测试网站
    【原创】Kakfa utils源代码分析(三)
  • 原文地址:https://www.cnblogs.com/imaikce/p/10882227.html
Copyright © 2011-2022 走看看