zoukankan      html  css  js  c++  java
  • 设计模式——构造者模式

    构造器模式_组装复杂实例(逐步构造出一个复杂的实例

    /**
     * 指挥者
     * @author maikec
     * @date 2019/5/11
     */
    public class Director {
        private final AbstractBuilder builder;
        public Director(AbstractBuilder builder){
            this.builder = builder;
        }
        public void builderMessage(){
            builder.createHead();
            builder.createBody();
            builder.signature();
        }
    }
    
    /**
     * 抽象构造器
     * @author maikec
     * @date 2019/5/11
     */
    public abstract class AbstractBuilder {
        protected Message message;
        protected Head head;
        protected Body body;
        protected Author author;
        /**
         * 创建消息头部
         * @return
         */
        protected abstract Head createHead();
    
        /**
         * 创建消息体
         * @return
         */
        protected abstract Body createBody();
    
        /**
         * 署名
         * @return
         */
        protected abstract Author signature();
    
        public Message getMessage(){
            return message;
        }
    }
    
    /**
     * @author maikec
     * @date 2019/5/11
     */
    public class Message {
        private Head head;
        private Body body;
        private Author author;
        public Message(){}
        public Message(Head head,Body body,Author author){
            this.head = head;
            this.body = body;
            this.author = author;
        }
    
        @Override
        public String toString() {
             super.toString();
             if (head !=null || body != null || author != null){
                 StringBuffer sb = new StringBuffer( "[" );
                 if (head != null){
                     sb.append( head.toString() );
                 }
                 if (body != null){
                     sb.append( body.toString() );
                 }
                 if (author != null){
                     sb.append( author.toString() );
                 }
                 sb.append( "]" );
                 return sb.toString();
             }
             return null;
        }
    }
    
    /**
     * @author maikec
     * @date 2019/5/11
     */
    public class Head {
        private String name;
        public Head(){}
        public Head(String name){
            this.name = name;
        }
        @Override
        public String toString() {
            super.toString();
            return name == null ? "Head" : name;
        }
    }
    
    /**
     * @author maikec
     * @date 2019/5/11
     */
    public class Body {
        private String name;
        public Body(){}
        public Body(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
             super.toString();
             return name == null ? "Body" : name;
        }
    }
    
    /**
     * @author maikec
     * @date 2019/5/11
     */
    public class Author {
        private String name;
        public Author(){}
        public Author(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
             super.toString();
             return name == null ? "Author" : name;
        }
    }
    
    /**
     * Email构造器
     * @author maikec
     * @date 2019/5/11
     */
    public class EmailBuilder extends AbstractBuilder {
        @Override
        protected Head createHead() {
             head = new Head("Email Head");
             return head;
        }
    
        @Override
        protected Body createBody() {
            body = new Body("Email Body");
            return body;
        }
    
        @Override
        protected Author signature() {
            author =  new Author("maikec");
            return author;
        }
    
        @Override
        public Message getMessage() {
            return new Message( head,body,author );
        }
    }

    附录

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

    声明

    引用该文档请注明出处

  • 相关阅读:
    Android OpenGL ES 2.0 (四) 灯光perfragment lighting
    Android OpenGL ES 2.0 (五) 添加材质
    冒泡排序函数
    javascript object 转换为 json格式 toJSONString
    Liunx CentOS 下载地址
    jquery 图片切换特效 鼠标点击左右按钮焦点图切换滚动
    javascript 解析csv 的function
    mysql Innodb Shutdown completed; log sequence number解决办法
    Centos 添加 yum
    javascript 键值转换
  • 原文地址:https://www.cnblogs.com/imaikce/p/10903134.html
Copyright © 2011-2022 走看看