当一个类的构造参数过多,或者将会越来越多的时候,可以使用Builder模式来创建该类。
一般工作中看到大部分人用JavaBean来作为参数解决这个问题,简单明了,但是大部分情况下这些参数可能没有关联,抽象出这么个类不优雅,可读性差。如果直接让该类提供set参数方法,将构造过程分解到调用多个set方法的过程中,在构造过程中JavaBean可能处于不一致的状态。
用Builder模式实现:
package hello;
/**
* Person
*
* @author crystalChen
* @date 16/6/4 10:13
*/
public class Person {
private final int id;
private final String lastName;
private final String firstName;
private final boolean sex;
private final int age;
private Person(Builder builder) {
id = builder.id;
lastName = builder.lastName;
firstName = builder.firstName;
sex = builder.sex;
age = builder.age;
}
public static class Builder {
private final int id;
private final String lastName;
private final String firstName;
private boolean sex;
private int age;
// 传入必填字段
public Builder(int id, String lastName, String firstName) {
this.id = id;
this.lastName = lastName;
this.firstName = firstName;
}
public Builder sex(boolean b) {
sex = b;
return this;
}
public Builder age(int age) {
this.age = age;
return this;
}
public Person build() {
return new Person(this);
}
}
public static void main(String[] args) {
new Person.Builder(360,"crystal","chen").sex(true).age(23);
}
}