先上代码~
public class People {
private final String sex;
private final String name;
private final int id;
private final String face;
public static class Builder {
//必选参数
private final String sex;
private final String name;
//非必须参数
private int id = 0;
private String face = "nice";
public Builder(String sex, String name) {
this.sex = sex;
this.name = name;
}
public Builder id(int val) {
id = val;
return this;
}
public Builder face(String val) {
face = val;
return this;
}
public People build() {
return new People(this);
}
}
private People(Builder builder) {
sex = builder.sex;
name = builder.name;
id = builder.id;
face = builder.face;
}
}
</code> Builder是一个内部类,将必选参数在有参构造函数中初始化,可以保证新建对象时一定能初始化且该对象是不变的。之后可选参数放在内部类的方法中,注意返回的是对象本身(this),方便继续连接其它方法。
客户端调用举例:
People p=new People.Builder("男","朱东明").id(1).face("凑合").build();
</code>
Builder模式的好处:
- 相比多参数的构造函数而言,参数很多时可读性强。
- 相比Javabean而言,可以保证对象的一致性,尤其是多线程的安全性。
- 适合多参数,且有些参数是必选,有些参数是可选的情况。方便客户端调用。
缺点:
性能稍微下降。