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更安全。