Builder模式:此模式下,用户不用知道内部构建细节,可以更好的控制构建流程。一个复杂对象可以有很多参数、部件,Builder模式就是为了将创建这个复杂对象的过程和对象的众多参数部件分开,已达到解耦的目的。
一般过程:
1、私有化构建方法,使其只能通过内部类Builder的build方法创建
2、静态内部类作为桥梁,可以设置所有参数
3、通过build的方法创建Person实例。
4、由于Builder这个桥梁,使得构建时可以设置不同参数,把构建和参数解耦。
5、创建实例后,参数不可再改。
6、隐藏了构建过程,我们还可以在构建过程中增加一些处理,这些处理都是隐藏的,比如在下面的例子中我们可以计算age是否是小于等于18岁等。
如下所示:Person类通过传入其内部类Build的实例进行构造,而Build提供对其所有参数的访问器,用户可以根据需要,自由组合。
public class Person {
private int ID;
private int age;
private String name;
private int hight;
private int weight;
private Callback callback;
interface Callback {
void callback();
}
private Person(Builder builder) {
this.ID = builder.ID;
this.age = builder.age;
this.name = builder.name;
this.hight = builder.hight;
this.weight = builder.weight;
this.callback = builder.callback;
}
public static class Builder {
private int ID;
private int age;
private String name;
private int hight;
private int weight;
private Callback callback;
public Builder setID(int ID) {
this.ID = ID;
return this;
}
public Builder setAge(int age) {
this.age = age;
return this;
}
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setHight(int hight) {
this.hight = hight;
return this;
}
public Builder setWeight(int weight) {
this.weight = weight;
return this;
}
public Builder setCallback(Callback callback) {
this.callback = callback;
return this;
}
public Person build() {
return new Person(this);
}
}
}
Person.Builder buider = new Person.Builder();
buider.setAge(13);
buider.setName("jack");
Person Tom = buider.build();