Builder模式的作用是将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。它可以不直接生成想要的对象。然后客户端使用者在builder对象上调用类似于setter的方法,来设置每个相关的可选参数。最后,使用者调用无参的build方法来生成不可变的对象。这个builder是它构建类的静态类。示例:
class Person {
private int id;
private String name;
private int age;
private double weight;
private int score;
private Location loc;
private Person() {
}
public static class PersonBuilder {
private Person p = new Person();
public PersonBuilder baseInfo(int id,int age,String name){
p.id = id;
p.age = age;
p.name = name;
return this;
}
public PersonBuilder weight(double weight){
p.weight = weight;
return this;
}
public PersonBuilder score(int score){
p.score = score;
return this;
}
public PersonBuilder loc(String street,String roomNo){
p.loc = new Location(street,roomNo);
return this;
}
public Person build(){
return p;
}
}
}
class Location {
String street;
String roomNo;
public Location(String street,String roomNo) {
this.street = street;
this.roomNo = roomNo;
}
}
class Test {
public static void main(String[] args) {
Person p = new Person.PersonBuilder()
.baseInfo(10,20,"Tom")
.weight(60.0)
.loc("南一道","25")
.build();
}
}
注意Person是不可变的,所有的默认参数值都单独放在一个地方。builder的setter方法返回builder本身,以便可以把调用链接起来。如上面代码所示,这样客户端的代码就很容易编写而且易于阅读。
网友评论