构建模式:
当一个类的内部数据过于复杂的时候,要创建的话可能就需要了解这个类的内部结构,还有这些东西是怎么组织装配等一大坨乱七八糟的东西,这个时候就会增加学习成本而且会很混乱,这个时候就想啊想一种什么法子来管理一下这个类中的数据呢,怎么在创建的时候让它按部就班的来,并且代码可读性很好别让我看花了眼啊,我要的东西也能都很好设置进来,这就是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方法名取成类似注释的方式,这样我们可以很清晰的知道刚才究竟设置的什么值,可读性较高,缺点是比较冗长。