builder 模式
分离复杂对象的构建和表示
同样的构建过程可以创建不同的表示
一个类构建的话,需要传递50个参数,这个时候就可以使用
Person person = new Person.PersonBuilder()
.basicInfo(1, "liguojing", 29)
.score(100)
.weight(150)
.location("袁旗寨", "42排")
.build();
// 如果不想指定这个对象的一个部分,可以灵活的注释掉就行,
// 用不到的就不用每次都传递,最后就拿到了要构建的对象Person
//作为一个人,他可能有很多属性,
public class Person {
private int id;//编号
private String name;//名字
private int age;//年龄
private double weight;//体重
private int score;//分数
private Location location;//住址
private Person() {
}
//person 类里面的静态内部类,只用来构建Person,别人 创建不了Person,只能由它来创建
//相当于你叫它静态工厂,也没问题
public static class PersonBuilder{
// 由于它是Person静态内部类,所以可以访问private的构造方法
private Person p = new Person();
public PersonBuilder basicInfo(int id,String name,int age){
p.id = id;
p.name = name;
p.age = age;
return this;
}
// 其他的你想用哪个用哪个
public PersonBuilder weight(double weight){
p.weight = weight;
return this;
}
public PersonBuilder score(int score){
p.score = score;
return this;
}
// 指定他的住址,街道 和 门牌号码
public PersonBuilder location(String street,String roomNo){
p.location = new Location(street,roomNo);
return this;
}
public Person build(){
return p;
}
}
static class Location{
String street;
String roomNo;
public Location(String street,String roomNo){
this.street = street;
this.roomNo = roomNo;
}
}
}