builder模式

作者: oneWeekOneTopic | 来源:发表于2018-06-08 10:44 被阅读9次

    解决问题

    以一种更加清晰简洁的方式来解决复杂结构体的构建过程,且可以让用户更加灵活地控制对象的构建过程。相对于constructor和setter方法,它的语法更加简洁和清晰。

    但它所面临的一个问题是,对于每个类都要写一个Builder,这无疑增加了写代码的难度。

    应用场景

    应用于复杂结构体的构建。一个很好的工具是lombok的@Builder

    原理图(UML)

    image

    这个原理图是比较恶心的,采用接口化编程实理builder, 然后使用一个引导器完成对象的创建。一般情况下,不建议使用该方式(太复杂)

    示例

    我认为该原理图将builder模式变得很复杂,既然每个类都要写一个builder,那该builder我们可以将其认为是类的一部分,所以使用内部类会成为一个不错的方式

    public class Student {
    
        private int id;
        private String name;
        private String passwd;
        private String sex;
        private String address;
    
        // 构造器尽量缩小范围
        private Student() {
        }
    
        // 构造器尽量缩小范围
        private Student(Student origin) {
            // 拷贝一份
             this.id = origin.id;
            this.name = origin.name;
            this.passwd = origin.passwd;
            this.sex = origin.sex;
            this.address = origin.address;
        }
    
        public int getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    
        public String getPasswd() {
            return passwd;
        }
    
        public String getSex() {
            return sex;
        }
    
        public String getAddress() {
            return address;
        }
    
        /**
         * Student的创建完全依靠Student.Builder,使用一种方法链的方式来创建
         *
         */
        public static class Builder {
    
            private Student target;
    
            public Builder() {
                target = new Student();
            }
    
            public Builder address(int id) {
                target.id = id;
                return this;
            }
    
            public Builder name(String name) {
                target.name = name;
                return this;
            }
    
            public Builder password(String passwd) {
                target.passwd = passwd;
                return this;
            }
    
            public Builder sex(String sex) {
                target.sex = sex;
                return this;
            }
    
            public Builder address(String address) {
                target.address = address;
                return this;
            }
    
            public Student build() {
                return new Student(target);
            }
            
        }
    
    }
    
    
    Student s=new Student.Builder().name("xx").password("****").sex("男").address("北京市朝阳区").build();
    

    image

    参考

    https://www.cnblogs.com/cc11001100/p/5939220.html

    相关文章

      网友评论

        本文标题:builder模式

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