의도
복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공할 수 있도록 합니다.
활용성
- 복합 객체의 생성 알고리즘이 이를 합성하는 요소 객체들이 무엇인지 이들의 조립 방법에 독립적일 때
- 합성할 객체들의 표현이 서로 다르더라도 생성 절차에서 이를 지원해야 할 때
구조
참여자
- Builder: Product객체의 일부 요소들을 생성하기 위한 추상 인터페이스 정의
- ConcreteBuilder: Builder 클래스에 정의된 인터페이스를 구현
- Director: Builder 인터페이스를 사용하는 객체를 합성
- Product: 생성할 복합 객체를 표현
협력방법
사용자는 Director 객체를 생성하고, 이렇게 생성한 객체를 자신이 원하는 Builder 객체로 합성하고, 제품의 일부가 구축될 때마다 Director는 Builder에 통보합니다. Builder는 Director의 요청을 처리하여 제품에 부품을 추가합니다. 사용자는 Builder에서 제품을 검색합니다.
결과
- 제품에 대한 내부 표현을 다양하게 변화할 수 있습니다.
- 생성과 표현에 필요한 코드를 분리합니다.
- 복합 객체를 생성하는 절차를 좀 더 세밀하게 나눌 수 있습니다.