Builder Pattern

Tags:

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)