建造者模式(Builder)
- Builder模式来替代多参数构造函数比较好,不需要在构造函数里面传递多个参数,适合我们一般初始化较多配置的时候
1.示例
public class NutritionFacts {
private int fat;
private int sodium;
private int serviceSize;
public NutritionFacts(Builder builder) {
fat=builder.fat;
serviceSize=builder.serviceSize;
sodium=builder.sodium;
}
public static class Builder {
private int fat = 0;
private int sodium = 0;
private int serviceSize = 0;
public Builder(int serviceSize, int sodium) {
this.serviceSize = serviceSize;
this.sodium = sodium;
}
public Builder fat(int val) {
fat = val;
return this;
}
public Builder sodium(int val) {
sodium = sodium;
return this;
}
public NutritionFacts Builder() {
return new NutritionFacts(this);
}
}
2.调用
//建造者模式
NutritionFacts.Builder builder = new NutritionFacts.Builder(20, 0);
builder.fat(50).sodium(20).Builder();
总结:
优点与缺点
- 优点
良好的封装性, 使用建造者模式可以使客户端不必知道产品内部组成的细节;
建造者独立,容易扩展;
在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。
- 缺点
会产生多余的Builder对象消耗内存;
对象的构建过程暴露。