在Java中我们经常会创建很多对象,以创建一个人为例,必需的属性是姓名和年龄,其他的诸如电话,地址等是非必须的,那么我们通常的做法是定义这样一个java bean这样:
public class People {
private String name;
private Integer age;
private String gender;
private String address;
private String phone;
public People(String name, Integer age){
this.name = name;
this.age = age;
}
public People(String name, Integer age, String gender, String address, String phone){
this.name = name;
this.age = age;
this.gender = gender;
this.address = address;
this.phone = phone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
然后通过构造方法和set方法来生成所需要的实例:
People p = new People("zhang san", 12);
p.setAddress("China");
p.setPhone("1234567");
当对象比较复杂,属性比较多的时候,需要写很多构造方法,或者调用很多set方法.
一种改进的方法可以这样:
public class People {
private String name;
private Integer age;
private String gender;
private String address;
private String phone;
public People(PeopleBuilder builder){
this.name = builder.name;
this.age = builder.age;
this.gender = builder.gender;
this.address = builder.address;
this.phone = builder.phone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public static class PeopleBuilder {
private String name;
private Integer age;
private String gender;
private String address;
private String phone;
public PeopleBuilder(String name, Integer age){
this.name = name;
this.age = age;
}
public PeopleBuilder gender(String gender) {
this.gender = gender;
return this;
}
public PeopleBuilder address(String address) {
this.address = address;
return this;
}
public PeopleBuilder phone(String phone) {
this.phone = phone;
return this;
}
public People build() {
People p = new People(this);
return p;
}
}
}
生成People实例:
People p = new People.PeopleBuilder("li si", 32).address("USA").phone("12345").build();