如果构建一个对象需要很多参数时,那么有三种方式可以实现。 第一种就是多重构造器
public class Person {
private final int id; //required
private final String name; //required
private final int age; //optional
private final int gender; //optional
private final Date brithDay; //optional
public Person(int id, String name, int age, int gender, Date brithDay) {
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
this.brithDay = brithDay;
}
public Person(int id, String name, int age, int gender){
this(id, name, age, gender, null);
}
public Person(int id, String name, int age){
this(id, name, age, 0);
}
public Person(int id, String name){
this(id, name,0);
}
}
第二种JavaBean 通过setter设置参数 缺点:因为构造过程被分到了几个调用中,在构造过程中JavaBean可能处于不一致的状态。 第三种Builder构建器模式
public class Person {
private final int id; //required
private final String name; //required
private final int age; //optional
private final int gender; //optional
private final Date birthday; //optional
public static class Builder implements com.zml.Builder<Person>{
private int id; //required
private String name; //required
private int age = 0; //optional
private int gender = 0; //optional
private Date birthday = null; //optional
public Builder(int id,String name){
this.id = id;
this.name = name;
}
public Builder age(int age){
this.age = age;
return this;
}
public Builder gender(int gender){
this.gender = gender;
return this;
}
public Builder brithDay(Date brithDay){
this.birthday = brithDay;
return this;
}
@Override
public Person builder() {
return new Person(this);
}
}
public Person(Builder builder) {
this.id = builder.id;
this.name = builder.name;
this.age = builder.age;
this.gender = builder.gender;
this.birthday = builder.birthday;
}
public static void main(String[] args) {
Person person = new Person.Builder(1,"hello").builder();
}
}
public interface Builder<T> {
T builder();
}