Builder 패턴은 인스턴스들을 조립하는 역활을 하는 패턴입니다.
Builder 클래스는 인스턴스를 생성하기 위한 메서드를 선언합니다.
Director는 Builder의 매서드를 사용하여 인스턴스를 생성합니다.
ConcreateBuilder는 Builder의 메서드를 구현합니다
Director
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public void construct() {
builder.makeTitle("Greeting");
builder.makeString("일반적인 인사");
builder.makeItems(new String[]{"How are you?", "Hello.", "Hi"});
builder.makeString("시간대별 인사");
builder.makeItems(new String[]{"Good morning", "Good afternoon.", "Good evening"});
builder.close();
}
}
Builder
public class TextBuilder extends Builder {
private StringBuffer sb = new StringBuffer();
@Override
public void makeTitle(String title) {
}
@Override
public void makeString(String str) {
}
@Override
public void makeItems(String[] items) {
}
@Override
public void close() {
}
public String getTextResult(){
return sb.toString();
}
}
Client
TextBuilder textBuilder = new TextBuilder();
Director director = new Director(textBuilder);
director.construct();
System.out.println(textBuilder.getTextResult());
TemplateMethod 패턴과 메서드를 조합해서 어떤 결과를 나타내준다는 점은 똑같아보였지만 TemplateMethod는 abstract클래스에 abstract메서드와 이를 조합한 TemplateMethod가 있지만 Builder패턴은 Director가 Builder클래스를 의존성 주입하여 Builder의 메서드를 Director에서 조합한다는 것이 달랐다.
- 의존성 주입
의존성 주입은 생성자를 통해 객체와 객체를 이어주는 방법이다.
위의 코드에서 Director 객체가 Builder 객체를 의존성 주입을 통해 construct()에서 사용하고 있다.