设计模式之构建模式(Builder)

构建模式:

当一个类的内部数据过于复杂的时候,要创建的话可能就需要了解这个类的内部结构,还有这些东西是怎么组织装配等一大坨乱七八糟的东西,这个时候就会增加学习成本而且会很混乱,这个时候就想啊想一种什么法子来管理一下这个类中的数据呢,怎么在创建的时候让它按部就班的来,并且代码可读性很好别让我看花了眼啊,我要的东西也能都很好设置进来,这就是Builder模式的应用场景,Builder模式可以将一个类的构建和表示进行分离

看一个例子

public class Student {

    private int id;
    private int age;
    private String name;

    /**
     * 构造方法私有化
     * ***/
    private Student(){

    }

/**Student的创建完全依靠Student.Builder**/
    public static class  Builder{

        Student target;
        public Builder(){
            target = new Student();
        }

        public Builder setId(int id){
            target.setId(id);
            return this;
        }
        public Builder setAge(int age){
            target.setAge(age);
            return this;
        }
        public Builder setName(String name){
            target.setName(name);
            return this;
        }

        public Student builder(){

            return target;
        }

    }


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Student 并不是new出来的,对它构造方法访问的范围性竟可能的小,只能通过Student.Builder 来构建自己,Student.Builder通过方法链的方式来设置值,最后调用builder方法返回一个Student对象,

/**最后调用的形式*/
 new Student.Builder()
                .setAge(15)
                .setName("Cvmars")
                .setId(10086).builder();

再对比一下如果不使用构造者模式(一般情况下的用法):

public class Student {

    private int id;
    private String name;
    private String passwd;
    private String sex;
    private String address;

    public Student() {
    }

    public Student(String name, String passwd, String sex, String address) {
        super();
        this.name = name;
        this.passwd = passwd;
        this.sex = sex;
        this.address = address;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPasswd() {
        return passwd;
    }

    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

}

创建对象:
Student stu = new Student("Cvmars","tt","男","西湖区");
对比一下进行一个优劣性分析:

构造方法:优点是比较简单,开发效率高,缺点是如果参数真的很多的的情况,不知道参数对应什么值,可读性差。

参数太多不清楚对应值

Builder模式:优点是可以将构造器的setter方法名取成类似注释的方式,这样我们可以很清晰的知道刚才究竟设置的什么值,可读性较高,缺点是比较冗长。

你可能感兴趣的:(设计模式之构建模式(Builder))