빌더 패턴
Builder pattern빌더 패턴은 객체 지향 프로그래밍에서 다양한 객체 생성 문제에 유연한 솔루션을 제공하기 위해 고안된 디자인 패턴이다.Builder 설계 패턴의 목적은 복잡한 물체의 구성과 그것의 표현을 분리하는 것이다.4대강 디자인 패턴 중 하나이다.
개요
빌더 설계 패턴은 객체 지향 소프트웨어에서 반복되는 설계 문제를 해결하는 방법을 설명하는 GoF 설계 패턴[1] 중 하나이다.
Builder 설계 패턴으로 다음과 같은 문제 해결:[2]
- 클래스(동일한 구성 프로세스)가 어떻게 복잡한 객체의 다른 표현을 만들 수 있는가?
- 복잡한 오브젝트 작성을 포함하는 클래스를 어떻게 단순화할 수 있는가?
복잡한 물체의 부품을 클래스 내에서 직접 만들고 조립하는 것은 융통성이 없다.그것은 클래스를 복잡한 객체의 특정 표현을 만드는 것으로 커밋하고 클래스를 변경할 필요 없이 나중에 독립적으로 표현을 변경할 수 없게 한다.
Builder 설계 패턴은 이러한 문제를 해결하는 방법을 설명한다.
- 복잡한 물체의 부품 제작 및 조립을 별도의 캡슐화
Builder이의를 제기하다 - 클래스는 객체 생성을 에 위임한다.
Builder개체를 직접 생성하는 대신 개체.
클래스(동일한 구성 프로세스)는 다른 클래스에 위임할 수 있음Builder복잡한 객체의 다른 표현을 만드는 객체.
정의
Builder 설계 패턴의 목적은 복잡한 물체의 구성과 그것의 표현을 분리하는 것이다.그렇게 함으로써, 같은 건설 과정이 다른 표현을 만들 수 있다.[1]
이점
Builder 패턴의 장점은 다음과 같다.[3]
- 제품의 내부 표현을 변경할 수 있음
- 구성 및 표현에 대한 코드를 캡슐화한다.
- 시공 단계에 대한 제어 기능 제공.
단점들
Builder 패턴의 단점은 다음과 같다.[3]
- 각 제품 유형에 대해 고유한 ConcreteBuilder를 생성해야 한다.
- 빌더 클래스는 반드시 변경할 수 있어야 한다.
- 종속성 주입을 방해/불만화할 수 있음.
구조
UML 클래스 및 시퀀스 다이어그램
위의 UML클래스 다이어그램에서Director클래스가 생성되고 조립되지 않음ProductA1그리고ProductB1직접 물체대신, The는Director에 언급하다Builder복잡한 물체의 부품을 제작(생성 및 조립)하기 위한 인터페이스로, 이 인터페이스는Director어떤 콘크리트 계층이 인스턴스화되는지(표현이 생성됨)와 무관하다.그Builder1클래스는 다음 작업을 수행한다.Builder인터페이스 생성 및 조립을 통해ProductA1그리고ProductB1물건들
UMLsequence 다이어그램은 런타임 교호작용을 보여준다.그Director반대 전화buildPartA()에서Builder1창조하고 조립하는 물체ProductA1이의를 제기하다그 후에Director전화를 하다buildPartB()에 관하여Builder1, 그것은 창조하고 조립한다.ProductB1이의를 제기하다
클래스 다이어그램
- 빌더
- 객체(제품)를 생성하기 위한 추상 인터페이스.
예
C# 예:
/// <<summary>> /// 건설업자가 만든 제품 표시 /// </> 공중의 계급 자전거 { 공중의 끈을 매다 만들다 { 얻다; 세트; } 공중의 끈을 매다 모델 { 얻다; 세트; } 공중의 인트로 높이 { 얻다; 세트; } 공중의 끈을 매다 색 { 얻다; 세트; } 공중의 자전거(끈을 매다 만들다, 끈을 매다 본을 뜨다, 끈을 매다 색칠을 하다, 인트로 높이) { 만들다 = 만들다; 모델 = 본을 뜨다; 색 = 색칠을 하다; 높이 = 높이; } } /// <<summary>> /// 빌더 추상화 /// </> 공중의 접점 아이비사이클빌더 { 끈을 매다 색 { 얻다; 세트; } 인트로 높이 { 얻다; 세트; } 자전거 GetResult(); } /// <<summary>> /// 콘크리트 시공자 구현 /// </> 공중의 계급 GTBuilder : 아이비사이클빌더 { 공중의 끈을 매다 색 { 얻다; 세트; } 공중의 인트로 높이 { 얻다; 세트; } 공중의 자전거 GetResult() { 돌아오다 높이 == 29 ? 새로운 자전거("GT", "아발란치", 색, 높이) : 무효의; } } /// <<summary>> // 감독 /// </> 공중의 계급 마운틴바이크빌드디렉터 { 사유의 아이비사이클빌더 _빌더; 공중의 마운틴바이크빌드디렉터(아이비사이클빌더 건축가) { _빌더 = 건축가; } 공중의 공허하게 하다 구성하다() { _빌더.색 = "빨간색"; _빌더.높이 = 29; } 공중의 자전거 GetResult() { 돌아오다 이._빌더.GetResult(); } } 공중의 계급 고객 { 공중의 공허하게 하다 DoSomethingWithBicycles() { 시합을 하다 건축가 = 새로운 GTBuilder(); 시합을 하다 감독 = 새로운 마운틴바이크빌드디렉터(건축가); // 디렉터는 제품의 단계적 생성을 통제하고 결과를 반환한다. 감독.구성하다(); 자전거 마이마운틴바이크 = 감독.GetResult(); } } 책임자는 위의 예에서 자전거 인스턴스를 조립하여 의뢰인이 책임자에게 제공한 별도의 빌더 객체에 건설을 위임한다.
참고 항목
참조
- ^ a b Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley. pp. 97ff. ISBN 0-201-63361-2.
{{cite book}}: CS1 maint : 복수이름 : 작성자 목록(링크) - ^ "The Builder design pattern - Problem, Solution, and Applicability". w3sDesign.com. Retrieved 2017-08-13.
- ^ a b "Index of /archive/2010/winter/51023-1/presentations" (PDF). www.classes.cs.uchicago.edu. Retrieved 2016-03-03.
- ^ "The Builder design pattern - Structure and Collaboration". w3sDesign.com. Retrieved 2017-08-12.
외부 링크
| 위키북 컴퓨터 과학 디자인 패턴에는 다음과 같은 주제의 페이지가 있다:다양한 언어로 된 빌더 구현 |
- 게터와 세터(Alen Holub)가 없는 JavaWorld 기사 Build 사용자 인터페이스(Building user interface)는 Builder에 대한 Java 소스 코드 전체를 보여준다.