본문

Builder Pattern

반응형

 

이미지 출처: https://refactoring.guru/design-patterns/builder

 

 

 

뭔가가 만들어 지는 과정은 꽤나 복잡할 수가 있습니다. 게다가 그 복잡한 과정이 순서대로 실행되어야 할 때도 있습니다. 

객체의 생성에 있어서 이런 복잡한 과정들을 분리해 내는 것이 Builder 패턴입니다. (ex : 다리만들기 메소드, 팔만들기 메소드)

 

💡 source


// 객체 생성과정을 관리하는 빌더 인터페이스 
public interface 빌더 {
    void 팔만들기();

    void 다리만들기();

    영웅 결과물보여줘();
}

// 복잡한 영웅 객체를 실제로 만들어내는 빌더의 구현체인 배트맨 찍어내는 클래스
public class 베트맨빌더 implements 빌더 {
    private 영웅 베트맨;

    베트맨빌더() {
        베트맨 = new 영웅("베트맨");
    }

    public void 팔만들기() {
        베트맨.set팔("강철");
    }

    public void 다리만들기() {
        베트맨.set다리("무쇠");
    }

    public 영웅 결과물보여줘() {

        return 베트맨;
    }
}

public class 빌더관리자 {
    private 빌더 빌더;

    public 빌더관리자(빌더 빌더) {
        this.빌더 = 빌더;
    }

    public void 빌더() {
        빌더.팔만들기();
        빌더.다리만들기();
    }

    public 영웅 get영웅() {
        return 빌더.결과물보여줘();
    }
}

public class 영웅 {
    private String 팔재료;
    private String 다리재료;
    private String 이름;

    public 영웅(String 이름) {
        super();
        this.이름 = 이름;
    }

    public void set팔(String 팔재료) {
        this.팔재료 = 팔재료;
    }

    public void set다리(String 다리재료) {
        this.다리재료 = 다리재료;
    }

    public void 결과물보여줘() {
        System.out.println(팔재료 + "로만든 팔과" + 다리재료 + "로 만든 다리를 가진" + 이름);
    }
}

public class Main {
    public static void main(String[] args) {
        빌더 빌더 = new 베트맨빌더();
        빌더관리자 빌더관리자변수 = new 빌더관리자(빌더);

        // 팔만들기, 다리만들기 메소드 실행
        빌더관리자변수.빌더();

        영웅 영웅변수 = 빌더관리자변수.get영웅();
        영웅변수.결과물보여줘();
    }

}

 

 

💡 결과

강철로만든 팔과무쇠로 만든 다리를 가진베트맨
 
 
반응형

공유

댓글