关于建造者模式的一些理解
静态工厂跟构造器有个共同的局限性:都不能很好地扩展大量参数。例如一台电脑,如果必要参数有两个,参数一:i5处理器,参数二:1080显卡,非必要参数...
JavaBean也能实现,但是过于繁琐。
public class Outer {
//建造者模式
private final String necessaryA;
private final String necessaryB;
private final String unnecessaryC;
private final String unnecessaryD;
@Override
public String toString() {
return "Outer{" +
"necessaryA='" + necessaryA + '\'' +
", necessaryB='" + necessaryB + '\'' +
", unnecessaryC='" + unnecessaryC + '\'' +
", unnecessaryD='" + unnecessaryD + '\'' +
'}';
}
public static class Inner {
private final String necessaryA;
private final String necessaryB;
private String unnecessaryC;
private String unnecessaryD;
public Inner(String necessaryA,String necessaryB){
this.necessaryA = necessaryA;
this.necessaryB = necessaryB;
}
public Inner setC(String c){
unnecessaryC = c;
return Inner.this;
}
public Inner setD(String d){
unnecessaryD = d;
return Inner.this;
}
public Outer build(){
return new Outer(this);
}
}
private Outer(Inner inner){
necessaryA = inner.necessaryA;
necessaryB = inner.necessaryB;
unnecessaryC = inner.unnecessaryC;
unnecessaryD = inner.unnecessaryD;
}
public static void main(String[] args) {
System.out.println(new Inner("必要参数A", "必要参数B")
.setD("非必要参数D").build());
}
}
输出结果为
Outer{necessaryA='必要参数A', necessaryB='必要参数B', unnecessaryC='null', unnecessaryD='非必要参数D'}