빌더 패턴

Builder pattern

빌더 패턴은 객체 지향 프로그래밍에서 다양한 객체 생성 문제에 유연한 솔루션을 제공하기 위해 고안된 디자인 패턴이다.Builder 설계 패턴의 목적은 복잡한 물체의 구성과 그것의 표현을 분리하는 것이다.4대강 디자인 패턴 중 하나이다.

개요

빌더 설계 패턴은 객체 지향 소프트웨어에서 반복되는 설계 문제를 해결하는 방법을 설명하는 GoF 설계 패턴[1] 중 하나이다.

Builder 설계 패턴으로 다음과 같은 문제 해결:[2]

  • 클래스(동일한 구성 프로세스)가 어떻게 복잡한 객체의 다른 표현을 만들 수 있는가?
  • 복잡한 오브젝트 작성을 포함하는 클래스를 어떻게 단순화할 수 있는가?

복잡한 물체의 부품을 클래스 내에서 직접 만들고 조립하는 것은 융통성이 없다.그것은 클래스를 복잡한 객체의 특정 표현을 만드는 것으로 커밋하고 클래스를 변경할 필요 없이 나중에 독립적으로 표현을 변경할 수 없게 한다.

Builder 설계 패턴은 이러한 문제를 해결하는 방법을 설명한다.

  • 복잡한 물체의 부품 제작 및 조립을 별도의 캡슐화Builder이의를 제기하다
  • 클래스는 객체 생성을 에 위임한다.Builder개체를 직접 생성하는 대신 개체.

클래스(동일한 구성 프로세스)는 다른 클래스에 위임할 수 있음Builder복잡한 객체의 다른 표현을 만드는 객체.

정의

Builder 설계 패턴의 목적은 복잡한 물체의 구성과 그것의 표현을 분리하는 것이다.그렇게 함으로써, 같은 건설 과정이 다른 표현을 만들 수 있다.[1]

이점

Builder 패턴의 장점은 다음과 같다.[3]

  • 제품의 내부 표현을 변경할 수 있음
  • 구성 및 표현에 대한 코드를 캡슐화한다.
  • 시공 단계에 대한 제어 기능 제공.

단점들

Builder 패턴의 단점은 다음과 같다.[3]

  • 각 제품 유형에 대해 고유한 ConcreteBuilder를 생성해야 한다.
  • 빌더 클래스는 반드시 변경할 수 있어야 한다.
  • 종속성 주입을 방해/불만화할 수 있음.

구조

UML 클래스 및 시퀀스 다이어그램

Builder 설계 패턴에 대한 샘플 UML 클래스 및 시퀀스 다이어그램.[4]

위의 UML클래스 다이어그램에서Director클래스가 생성되고 조립되지 않음ProductA1그리고ProductB1직접 물체대신, The는Director에 언급하다Builder복잡한 물체의 부품을 제작(생성 및 조립)하기 위한 인터페이스로, 이 인터페이스는Director어떤 콘크리트 계층이 인스턴스화되는지(표현이 생성됨)와 무관하다.Builder1클래스는 다음 작업을 수행한다.Builder인터페이스 생성 및 조립을 통해ProductA1그리고ProductB1물건들
UMLsequence 다이어그램은 런타임 교호작용을 보여준다.Director반대 전화buildPartA()에서Builder1창조하고 조립하는 물체ProductA1이의를 제기하다그 후에Director전화를 하다buildPartB()에 관하여Builder1, 그것은 창조하고 조립한다.ProductB1이의를 제기하다

클래스 다이어그램

Builder Structure
빌더
객체(제품)를 생성하기 위한 추상 인터페이스.
콘크리트 빌더
Builder를 위한 구현 제공.그것은 다른 물체를 만들있는 물체다.객체를 제작할 부품을 제작하고 조립한다.

C# 예:

/// <<summary>> /// 건설업자가 만든 제품 표시 /// </> 공중의 계급 자전거 {     공중의 끈을 매다 만들다 { 얻다; 세트; }     공중의 끈을 매다 모델 { 얻다; 세트; }     공중의 인트로 높이 { 얻다; 세트; }     공중의 끈을 매다  { 얻다; 세트; }      공중의 자전거(끈을 매다 만들다, 끈을 매다 본을 뜨다, 끈을 매다 색칠을 하다, 인트로 높이)     {         만들다 = 만들다;         모델 = 본을 뜨다;          = 색칠을 하다;         높이 = 높이;     } }  /// <<summary>> /// 빌더 추상화 /// </> 공중의 접점 아이비사이클빌더 {     끈을 매다  { 얻다; 세트; }     인트로 높이 { 얻다; 세트; }      자전거 GetResult(); }  /// <<summary>> /// 콘크리트 시공자 구현 /// </> 공중의 계급 GTBuilder : 아이비사이클빌더 {     공중의 끈을 매다  { 얻다; 세트; }     공중의 인트로 높이 { 얻다; 세트; }      공중의 자전거 GetResult()     {         돌아오다 높이 == 29 ? 새로운 자전거("GT", "아발란치", , 높이) : 무효의;             } }  /// <<summary>> // 감독 /// </> 공중의 계급 마운틴바이크빌드디렉터 {     사유의 아이비사이클빌더 _빌더;     공중의 마운틴바이크빌드디렉터(아이비사이클빌더 건축가)      {         _빌더 = 건축가;     }      공중의 공허하게 하다 구성하다()     {         _빌더. = "빨간색";         _빌더.높이 = 29;     }      공중의 자전거 GetResult()  {   돌아오다 ._빌더.GetResult();  } }  공중의 계급 고객 {     공중의 공허하게 하다 DoSomethingWithBicycles()     {         시합을 하다 건축가 = 새로운 GTBuilder();         시합을 하다 감독 = 새로운 마운틴바이크빌드디렉터(건축가);          // 디렉터는 제품의 단계적 생성을 통제하고 결과를 반환한다.         감독.구성하다();         자전거 마이마운틴바이크 = 감독.GetResult();     } } 

책임자는 위의 예에서 자전거 인스턴스를 조립하여 의뢰인이 책임자에게 제공한 별도의 빌더 객체에 건설을 위임한다.

참고 항목

참조

  1. ^ 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 : 복수이름 : 작성자 목록(링크)
  2. ^ "The Builder design pattern - Problem, Solution, and Applicability". w3sDesign.com. Retrieved 2017-08-13.
  3. ^ a b "Index of /archive/2010/winter/51023-1/presentations" (PDF). www.classes.cs.uchicago.edu. Retrieved 2016-03-03.
  4. ^ "The Builder design pattern - Structure and Collaboration". w3sDesign.com. Retrieved 2017-08-12.

외부 링크