美文网首页
设计模式之Builder模式

设计模式之Builder模式

作者: 官先生Y | 来源:发表于2016-12-21 16:31 被阅读28次

    定义

    separate the construction of a complex object from its representation so that the same construction process can create different representations.
    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    使用场景

    1. 相同的方法,不同的执行顺序,产生不同的事件结果时。
    2. 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。
    3. 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个使用建造者模式非常适合。
    4. 当初始化一个对象特别复杂时,如参数多,且很多参数有默认值。

    Android应用场景

    1. android中的AlertDialog对话框的构建过程。
    2. Android的各种开源库,例如Retrofit的创建,OkHttp中OkHttpClient和Request。

    Java应用场景

    1. 在MyBatis3中通过SqlSessionFactoryBuilder构建SqlSessionFactory对象

    Builder模式代码实现

    public class DoDoContact {
        private final int    age;
        private final int    safeID;
        private final String name;
        private final String address;
     
        public int getAge() {
            return age;
        }
     
        public int getSafeID() {
            return safeID;
        }
     
        public String getName() {
            return name;
        }
     
        public String getAddress() {
            return address;
        }
     
        public static class Builder {
            private int    age     = 0;
            private int    safeID  = 0;
            private String name    = null;
            private String address = null;
            // 构建的步骤
            public Builder(String name) {
                this.name = name;
            }
     
            public Builder age(int val) {
                age = val;
                return this;
            }
     
            public Builder safeID(int val) {
                safeID = val;
                return this;
            }
     
            public Builder address(String val) {
                address = val;
                return this;
            }
     
            public DoDoContact build() { // 构建,返回一个新对象
                return new DoDoContact(this);
            }
        }
     
        private DoDoContact(Builder b) {
            age = b.age;
            safeID = b.safeID;
            name = b.name;
            address = b.address;
     
        }
    }
    
    

    Builder模式总结

    优点

    1. 良好的封装性, 使用建造者模式可以使客户端不必知道产品内部组成的细节;
    2. 建造者独立,容易扩展;
    3. 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到;
    4. 构造过程使用了链式调用,代码简洁。

    缺点

    1. 会产生多余的Builder对象增加内存消耗;

    相关文章

      网友评论

          本文标题:设计模式之Builder模式

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