您的位置:首页 > 产品设计 > UI/UE

Java/Android 构建者(Builder)设计模式(又叫生成器模式)

2018-03-21 15:49 567 查看
当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如config,VO,PO,Entity),要创建的话可能就需要了解这个类的内部结构,还有这些东西是怎么组织装配等一大坨乱七八糟的东西,这个时候就会增加开放成本,而且很混乱。这个时候就想啊想一种什么法子来管理一下这个类中的数据呢,怎么在创建的时候让它按部就班的来,并且代码可读性很好别让我看花了眼,我要的东西也能很好的设置进来,这就是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并不是直接new出来的,对其构造器进行了处理使其可访问范围尽可能的小,只让它通过Student.Builder来构建自己,在Student.Builder中提供了一种类set的方法链的方式来设置值,然后在最后的build()方法的时候会返回一个Student对象,现在要创建一个Student对象,代码如下:

Student s=new Student.Builder().name("CC").password("qwerty").sex("男").address("银河系第二旋臂").build();


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

复制代码
/**
* 学生实体
* @author CC11001100
*
*/
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 s=new Student("CC","qwerty","男","银河系第二旋臂");


一般的套路:优点是比较简单,开发效率高,缺点是如果参数真的很多的话鬼知道每个对应的是什么意思啊。

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

原文地址:构建者(Builder)设计模式(又叫生成器设计模式)

参考文章: 设计模式之Builder模式

Java高效编程之Builder模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: