http://developers.sun.com/learning/javaoneonline/2006/coreplatform/TS-1512.html
자바는 생성자에 값을 넘겨줄때 position 으로만 각 값을 어느 변수에 저장할지 결정할 수 있습니다. 그래서 n개의 변수가 클래스에 존재하는데, 이 각각의 변수에 값을 넘길까 말까의 여부가 사전에 결정되지 않는다면, 그런 모든 경우를 수용하기위해서는 2^n가지 생성자가 필요하죠. 그럼 이를 어떻게 해결하는가.
class Builder { private final int DEFAULT_VALUE = -1; private int a = DEFAULT_VALUE; private int b = DEFAULT_VALUE; private int c = DEFAULT_VALUE; public Builder a(int v) { this.a = v; return this; } public Builder b(int v) { this.b = v; return this; } public Builder c(int v) { this.c = v; return this; } public Foo build() { return new Foo(a, b, c); } } class Foo { private int a; private int b; private int c; public Foo(int a, int b, int c) { this.a = a; this.b = b; this.c = c; } public String toString() { return "a=" + a + ", b=" + b + ", c=" + c; } } public class BuilderApp { public static void main(String[] args) { Foo f = new Builder().a(1).c(2).build(); System.out.println(f.toString()); } }
그런데 Builder Pattern은 A, B, C 세가지의 클래스가 있고 이들을 만드는 방법이 각각 다른데 각각을 만드는 인터페이스는 똑같을 때 어떻게 처리하는가의 문제를 다루기 위한 방법을 지칭하는 용어로도 널리 쓰입니다.
(http://www.programmersheaven.com/articles/faisal/pattern.htm)