美文网首页
Builder模式

Builder模式

作者: 吕志豪 | 来源:发表于2018-03-13 08:41 被阅读0次

    定义 :将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
    场景 :

    • 相同的方法,不同的执行顺序,产生不同的事件结果时.
    • 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时.
    • 产品类非常复杂,或者产品类的调用顺序不同产生了不同的作用,
    • 当初始化一个对象非常复杂,如参数多,且很多参数都有默认值.
    public class User {
    
        private final String firstName;     // 必传参数
        private final String lastName;      // 必传参数
        private final int age;              // 可选参数
        private final String phone;         // 可选参数
        private final String address;       // 可选参数
    
        private User(UserBuilder builder) {
            this.firstName = builder.firstName;
            this.lastName = builder.lastName;
            this.age = builder.age;
            this.phone = builder.phone;
            this.address = builder.address;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public int getAge() {
            return age;
        }
    
        public String getPhone() {
            return phone;
        }
    
        public String getAddress() {
            return address;
        }
    
        public static class UserBuilder {
            private final String firstName;
            private final String lastName;
            private int age;
            private String phone;
            private String address;
    
            public UserBuilder(String firstName, String lastName) {
                this.firstName = firstName;
                this.lastName = lastName;
            }
    
            public UserBuilder age(int age) {
                this.age = age;
                return this;
            }
    
            public UserBuilder phone(String phone) {
                this.phone = phone;
                return this;
            }
    
            public UserBuilder address(String address) {
                this.address = address;
                return this;
            }
    
            public User build() {
                return new User(this);
            }
        }
    }
    

    有几个重要的地方需要强调一下:

    • ****User****类的构造方法是私有的。也就是说调用者不能直接创建User对象。
    • ****User****类的属性都是不可变的。所有的属性都添加了final修饰符,并且在构造方法中设置了值。并且,对外只提供getters方法。
    • Builder模式使用了链式调用。可读性更佳。
    • Builder的内部类构造方法中只接收必传的参数,并且该必传的参数适用了final修饰符。

    相关文章

      网友评论

          本文标题:Builder模式

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