작성 모드 - 작성자 모드

4689 단어 작성자 모드

1.유래


개발 과정에서 종종 복잡한 대상이 있는데, 그들은 일련의 구성원 속성을 가지고 있으며, 이러한 구성원 속성 중 일부는 인용 유형의 구성원 대상이다.그리고 이런 복잡한 대상에서 서로 다른 속성을 통해 생성된다
다른 대상;(예를 들어 자동차라는 대상은 서로 다른 엔진을 통해 제조된 후에 모두 자동차이지만 그의 성능, 가격은 다르다)

2. 정의


작성자 모드(Builder Pattern): 복잡한 객체의 작성 프로세스를 해당 표현과 분리하여 동일한 작성 프로세스에서 다른 표현을 작성할 수 있습니다.
예: (자동차의 생성 과정과 그의 완제품은 분리되어 같은 공정으로 생산하면 서로 다른 모델의 자동차를 얻을 수 있다)

3. 코드의 실현


역할
이러한 디자인 모델에는 다음과 같은 역할이 있습니다.
1. Builder: 제품 객체를 작성하는 각 부품에 대한 추상 인터페이스를 지정합니다.
2. ConcreteBuilder: Builder의 인터페이스를 실현하여 이 제품의 각 부품을 구성하고 조립하며 그것이 만든 표현을 정의하고 명확하게 하며 제품을 검색하는 인터페이스를 제공한다.
3. Director: Builder 인터페이스를 사용하는 대상을 구성하여 구축 과정을 지도한다.
4. Product: 구조된 복잡한 대상을 나타낸다.ConcreteBuilder는 이 제품의 내부 표현을 작성하고 조립 과정을 정의합니다. 구성 부품의 클래스를 정의하고, 이 부품을 최종 제품의 인터페이스로 조립하는 것을 포함합니다.
Builder:
public interface PersonBuilder {  
     void buildHead();  
     void buildBody();  
     void buildFoot();  
     Person buildPerson();  
}  

ConcreteBuilder  1:
public class ManBuilder implements PersonBuilder {  
     Person person;  
     public ManBuilder() {  
          person = new Man();  
     }  
     public void buildbody() {  
          person.setBody(" ");  
     }  
     public void buildFoot() {  
          person.setFoot(" ");  
     }  
     public void buildHead() {  
          person.setHead(" ");  
     }  
     public Person buildPerson() {  
          return person;  
     }  
}  

ConcreteBuilder  2:
public class WomanBuilder implements PersonBuilder {  
     Person person;  
     public WomanBuilder() {  
          person = new Woman();  
     }  
     public void buildbody() {  
          person.setBody(“ ");  
     }  
     public void buildFoot() {  
          person.setFoot(“ ");  
     }  
     public void buildHead() {  
          person.setHead(“ ");  
     }  
     public Person buildPerson() {  
          return person;  
     }  
}  

Director:
public class PersonDirector {  
     public Person constructPerson(PersonBuilder pb) {  
          pb.buildHead();  
          pb.buildBody();  
          pb.buildFoot();  
          return pb.buildPerson();  
     }  
}  

Product:
public class Person {  
     private String head;  
     private String body;  
     private String foot;  
  
     public String getHead() {  
          return head;  
     }  
     public void setHead(String head) {  
          this.head = head;  
     }  
     public String getBody() {  
          return body;  
     }  
     public void setBody(String body) {  
          this.body = body;  
     }  
     public String getFoot() {  
          return foot;  
     }  
     public void setFoot(String foot) {  
          this.foot = foot;  
     }  
}  
public class Man extends Person {  
     public Man(){  
          System.out.println(“ ");  
     }  
}  
public class Woman extends Person {  
     public Woman(){  
          System.out.println(“ ");  
     }  
}  

테스트:
public class Test{  
     public static void main(String[] args) {  
          PersonDirector pd = new PersonDirector();  
          Person womanPerson = pd.constructPerson(new ManBuilder());  
          Person manPerson = pd.constructPerson(new WomanBuilder());  
     }  
}  

4. 모드의 장점


건설자 모델에서 클라이언트는 제품 내부 구성의 세부 사항을 알 필요가 없고 제품 자체와 제품의 창설 과정을 결합시켜 같은 창설 과정이 서로 다른 제품 대상을 창설할 수 있도록 한다.
모든 구체적인 건설자는 상대적으로 독립되고 다른 구체적인 건설자와 무관하기 때문에 구체적인 건설자를 쉽게 교체하거나 새로운 구체적인 건설자를 추가할 수 있다. 사용자는 서로 다른 구체적인 건설자를 사용하면 서로 다른 제품 대상을 얻을 수 있다.
제품의 생성 과정을 더욱 세밀하게 제어할 수 있다.복잡한 제품의 창설 절차를 서로 다른 방법에서 분해하여 창설 과정을 더욱 명확하게 하고 프로그램으로 창설 과정을 제어하는 데 더욱 편리하다.
새로운 구체적인 건설자를 늘리려면 기존 라이브러리의 코드를 수정할 필요가 없고 지휘자류는 추상적인 건설자류에 대한 프로그래밍을 하고 시스템 확장이 편리하며'개폐원칙'에 부합된다.

5. 패턴의 단점


건설자 모델이 만든 제품은 일반적으로 비교적 많은 공통점을 가지고 그 구성 부분이 비슷하며 제품 간의 차이가 크면 건설자 모델을 사용하기에 적합하지 않기 때문에 그 사용 범위는 일정한 제한을 받는다.
만약 제품의 내부 변화가 복잡하다면 많은 구체적인 건설자 유형을 정의하여 이런 변화를 실현해야 하기 때문에 시스템이 매우 거대해질 수 있다

6. 장면 적용


생성해야 하는 제품 객체에는 일반적으로 여러 멤버 속성이 포함된 복잡한 내부 구조가 있습니다.
생성이 필요한 제품 대상의 속성은 서로 의존하고 생성 순서를 지정해야 한다.
객체의 작성 프로세스는 해당 객체를 작성하는 클래스와 독립적입니다.건설자 모델에 지휘자 클래스를 도입하여 창설 과정을 지휘자 클래스에 봉하고 건설자 클래스에 봉하지 않는다.
복잡한 객체의 작성 및 사용을 격리하고 동일한 작성 프로세스를 통해 다른 제품을 작성할 수 있습니다.
참조 블로그:
http://blog.csdn.net/jason0539/article/details/44992733
http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/builder.html

좋은 웹페이지 즐겨찾기