public class BuilderPattern {
private final String name;
private final String category;
private final int size;
private final int code;
private BuilderPattern(Builder builder) {
this.name = builder.name;
this.category = builder.category;
this.size = builder.size;
this.code = builder.code;
}
public static class Builder {
//required parameters
private final String name;
private final String category;
//optional parameters
private int size = 0;
private int code = 0;
public Builder(String name, String category) {
this.name = name;
this.category = category;
}
public Builder size(int size) {
this.size = size;
return this;
}
public Builder code(int code) {
this.code = code;
return this;
}
public BuilderPattern build() {
return new BuilderPattern(this);
}
}
@Override public String toString() {
return "name=" + this.name + ",category=" + this.category + ",size=" + this.size + ",code=" + this.code;
}
public static void main(String[] args) {
BuilderPattern bp = new BuilderPattern.Builder("nike", "鞋类").code(1001).size(40).build();
System.out.println(bp);
}
}
* 构造器和静态工厂方法有个共同的局限性:它们都不能很好的扩张到大量的可选参数。
通常使用JavaBean来包装参数,缺点是在构造过程中JavaBean可能出于不一致的状态。类无法仅仅
通过检验构造器参数的有效性来保证一致性。
如果类的构造器或者静态工厂方法中具有多个参数,设计这种类时,Builder模式就是不错的选择,
特别是大多数参数可选时。与传统的重叠构造器相比,使用Builder模式的客户端将更易于阅读和编写,
构造器也比JavaBean更安全。