1. 빌더 모델 개념
정의 : 동일한 구성 프로세스가 다른 표현을 생성 할 수 있도록 복잡한 물체 구성을 표현과 분리합니다.
핵심 : 별도의 구성 및 표현, 다른 표현은 구성 할 때 추상 공장 모델과 다릅니다.
(1) 추상 공장 패턴과 유사하게 복잡한 물체를 만들 수 있기 때문입니다. 주요 차이점은 Builder 모델이 부품 유형 및 어셈블리 프로세스의 순서에 중점을 둔 복잡한 물체를 단계별로 구성하는 데 중점을 둡니다. 추상 공장 모델은 여러 시리즈 제품 객체 (단순하거나 복잡한)에 중점을 둡니다. 빌더 패턴은 마지막 단계에서 제품을 반환하고 추상 공장의 경우 제품이 즉시 반환됩니다.
(2) 빌더 모드에는 건축업자를 관리하는 감독자가 있습니다. 사용자는 감독자에게 연락하고 감독자는 건축업자에게 연락하여 마침내 제품을받습니다. 즉, 건설 모델은 단계별 시공 프로세스를 강요 할 수 있습니다.
2. 그 역할
(1) 초록 빌더 역할 :이 역할은 제품의 다양한 구성 요소를 조절하고 초록 IT를 사용하는 데 사용되며, 이는 일반적으로 응용 프로그램의 논리와 무관합니다.
(2) 콘크리트 빌더 역할 :
이 역할은 추상 빌더에 정의 된 모든 방법을 구현하고 내장 제품 인스턴스를 반환합니다.
(3) 제품 (제품) 역할 :
이 역할은 건설의 복잡한 대상이며 시스템에는 하나 이상의 제품 범주가있을 것입니다. 이 제품에는 반드시 공개 인터페이스가 없으며 완전히 관련이 없을 수 있습니다.
(4) 이사 역할 :
캐릭터는 기존 모듈의 순서를 정렬 한 다음 건축업자에게 건축을 시작하도록 지시합니다.
3. 예
공개 인터페이스 빌더 {void buildParta (); void buildPartB (); void buildPartc (); } 공개 클래스 builderimpl은 builder {@override public void buildParta () {system.out.println ( "build a"); } @override public void buildPartB () {System.out.println ( "Build Part B"); } @override public void buildPartc () {System.out.println ( "Build C"); }} Public Class BuilderImpl2 Builder {@override public void buildParta () {System.out.println ( "build part aa"); } @override public void buildPartb () {System.out.println ( "Build Part BB"); } @override public void buildPartc () {System.out.println ( "Build CC"); }} / ** * 사령관 : 조합 빌더 */ 공공 클래스 디렉터 {Private Builder Builder; 공무원 (Builder Builder) {this.builder = Builder; } / *** 건축 방법 : 건설 프로세스 정의* 건설 프로세스를 정의하십시오* 다른 프로세스가이를 구현하는 데 필요한 경우, 새로운 한 사령관 이사* / public void construct () {System.out.println ( "건설을위한 감독 명령 빌더"); builder.buildparta (); builder.buildpartb (); builder.buildpartc (); }} 공공 클래스 디렉터 2 {개인 건축업자 빌더; 공무원 2 (Builder Builder) {this.builder = Builder; } / *** 건설 방법 : 건설 과정을 정의합니다* 건설 프로세스를 정의하십시오* 다른 프로세스가이를 구현하는 데 필요한 경우, 새로운 사령관 이사* / public void construct () {System.out.println ( "Director2 Commands Builder for Construction"); builder.buildpartb (); builder.buildpartc (); builder.buildparta (); }} 공개 클래스 테스트 {public static void main (String [] args) {builder builder = new builderimpl (); 이사 = 새로운 이사 (Builder); / * * 동일한 시공 프로세스, 다른 모듈 (BuildParta, BuildPartB, BuildPartc) 구현, 새로운 One Builder 구현 * 다른 건설 프로세스, 새로운 하나의 디렉터 * 다른 구성 프로세스, 다른 모듈 구현, 신규 감독 */ Director.construct (); System.out.println ( ""); Builder Builder2 = New BuilderImpl2 (); Director2 = 새로운 이사 (Builder2); Director2.construct (); System.out.println ( ""); Builder build3 = New BuilderImpl2 (); Director2 Director3 = New Director2 (Builder3); Director3.construct (); }}인쇄:
건설 건설 부품을위한 이사 사령부 건설 부품 B 건설 파트 C 건설 부품을위한 사령부 건축 업체 AA 건설 부품 BB 건설 부품 CC Director2 건축 부품 BB 건설 부품 CC 건설 부품 AA
4. 장점과 단점 (1) 장점 :
A. 제품의 내부 표현을 변경할 수 있습니다.
B. 건물 및 대표 코드를 캡슐화합니다.
C. 건설 과정을 넘어서 단계에 대한 제어를 제공합니다.
(2) 단점 :
A. 다양한 유형의 제품을 개별적으로 콘크리트 빌더로 만들 필요가 있습니다.
5. 사용 시나리오 :
(1) 복잡한 객체를 생성하기위한 알고리즘이 객체의 구성 요소와 조립 방식과 무관 해야하는 경우.
(2) 구성 프로세스가 구성된 객체가 다른 표현 (동일한 방법, 다른 실행 순서 및 다른 결과가 생성됨)을 허용 해야하는 경우.