美文网首页
设计模式之02:建造者模式(Builder模式)

设计模式之02:建造者模式(Builder模式)

作者: 木木禾木 | 来源:发表于2017-05-07 14:23 被阅读0次

    将一个复杂对象的构建与它的表示解耦,使得用户在不需要知道其内部构建细节的情况下,依然可以精细的构建出不同表示的复杂对象。

    优点:1. 良好的封装性;
       2. 建造者的独立性,使得易于扩展;
    缺点:会产生多余的Builder对象,消耗内存。

    使用场景

    1. 初始化一个对象特别复杂(如参数很多,且很多参数都有默认值),且构建之后变化性不大的。
    2. 相同方法,不同执行顺序,产生不同结果。

    如:网络请求、ImageLoader的config配置

    Builder模式也是一种比较常用的模式,比如经常用到的AlertDialog:

    AlertDialog dialog = new AlertDialog.Builder(this)
            .setTitle("title")
            .setMessage("message")
            .create();
    

    当然,AlertDialog也爆漏了一些属性设置的方法,但是不能链式调用:
    dialog.setTitle("title_1"); dialog.setMessage("message_1");

    常用实现

    public class Config {
    
        private Builder builder;
    
        private Config(Builder builder) {
            //属性赋值
            this.builder = builder;
        }
    
        public long getConnectTimeout() {
            return builder.connectTimeout;
        }
    
        /**
         * 静态内部类 Builder
         */
        public static class Builder {
    
            private long connectTimeout = 30 * 1000;
            private long responseTimeout = 30 * 1000;
            private long timeout = 60 * 1000;
            private boolean isUseCache = true;
            private boolean isUseDiskCache = false;
    
            public Config build() {
                return new Config(this);
            }
    
            public Builder setConnectTimeout(long connectTimeout) {
                this.connectTimeout = connectTimeout;
                return this;
            }
    
            public Builder setResponseTimeout(long responseTimeout) {
                this.responseTimeout = responseTimeout;
                return this;
            }
    
            public Builder setTimeout(long timeout) {
                this.timeout = timeout;
                return this;
            }
    
            public Builder setUseCache(boolean useCache) {
                isUseCache = useCache;
                return this;
            }
    
            public Builder setUseDiskCache(boolean useDiskCache) {
                isUseDiskCache = useDiskCache;
                return this;
            }
    
        }
    
    }
    

    使用:
    Config config = new Config.Builder() .setConnectTimeout(10 * 1000) .setUseDiskCache(true) .build();

    相关文章

      网友评论

          本文标题:设计模式之02:建造者模式(Builder模式)

          本文链接:https://www.haomeiwen.com/subject/pdcetxtx.html