작성 모드 - 작성자 모드
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
복잡한 대상의 조립과 창설-건설자 모델(셋째):Director의 토론, 모델 총결
일부 경우 시스템 구조를 단순화하기 위해 Director와 추상 작성자 Builder를 통합하고 Builder에서 복잡한 제품 객체를 단계적으로 구축하는 construct() 방법을 제공할 수 있습니다.Builder...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
작성자 모드(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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
복잡한 대상의 조립과 창설-건설자 모델(셋째):Director의 토론, 모델 총결
일부 경우 시스템 구조를 단순화하기 위해 Director와 추상 작성자 Builder를 통합하고 Builder에서 복잡한 제품 객체를 단계적으로 구축하는 construct() 방법을 제공할 수 있습니다.Builder...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
public interface PersonBuilder {
void buildHead();
void buildBody();
void buildFoot();
Person buildPerson();
}
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;
}
}
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;
}
}
public class PersonDirector {
public Person constructPerson(PersonBuilder pb) {
pb.buildHead();
pb.buildBody();
pb.buildFoot();
return pb.buildPerson();
}
}
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());
}
}
건설자 모델에서 클라이언트는 제품 내부 구성의 세부 사항을 알 필요가 없고 제품 자체와 제품의 창설 과정을 결합시켜 같은 창설 과정이 서로 다른 제품 대상을 창설할 수 있도록 한다.
모든 구체적인 건설자는 상대적으로 독립되고 다른 구체적인 건설자와 무관하기 때문에 구체적인 건설자를 쉽게 교체하거나 새로운 구체적인 건설자를 추가할 수 있다. 사용자는 서로 다른 구체적인 건설자를 사용하면 서로 다른 제품 대상을 얻을 수 있다.
제품의 생성 과정을 더욱 세밀하게 제어할 수 있다.복잡한 제품의 창설 절차를 서로 다른 방법에서 분해하여 창설 과정을 더욱 명확하게 하고 프로그램으로 창설 과정을 제어하는 데 더욱 편리하다.
새로운 구체적인 건설자를 늘리려면 기존 라이브러리의 코드를 수정할 필요가 없고 지휘자류는 추상적인 건설자류에 대한 프로그래밍을 하고 시스템 확장이 편리하며'개폐원칙'에 부합된다.
5. 패턴의 단점
건설자 모델이 만든 제품은 일반적으로 비교적 많은 공통점을 가지고 그 구성 부분이 비슷하며 제품 간의 차이가 크면 건설자 모델을 사용하기에 적합하지 않기 때문에 그 사용 범위는 일정한 제한을 받는다.
만약 제품의 내부 변화가 복잡하다면 많은 구체적인 건설자 유형을 정의하여 이런 변화를 실현해야 하기 때문에 시스템이 매우 거대해질 수 있다6. 장면 적용
생성해야 하는 제품 객체에는 일반적으로 여러 멤버 속성이 포함된 복잡한 내부 구조가 있습니다.
생성이 필요한 제품 대상의 속성은 서로 의존하고 생성 순서를 지정해야 한다.
객체의 작성 프로세스는 해당 객체를 작성하는 클래스와 독립적입니다.건설자 모델에 지휘자 클래스를 도입하여 창설 과정을 지휘자 클래스에 봉하고 건설자 클래스에 봉하지 않는다.
복잡한 객체의 작성 및 사용을 격리하고 동일한 작성 프로세스를 통해 다른 제품을 작성할 수 있습니다.
참조 블로그:
http://blog.csdn.net/jason0539/article/details/44992733
http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/builder.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
복잡한 대상의 조립과 창설-건설자 모델(셋째):Director의 토론, 모델 총결
일부 경우 시스템 구조를 단순화하기 위해 Director와 추상 작성자 Builder를 통합하고 Builder에서 복잡한 제품 객체를 단계적으로 구축하는 construct() 방법을 제공할 수 있습니다.Builder...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
생성해야 하는 제품 객체에는 일반적으로 여러 멤버 속성이 포함된 복잡한 내부 구조가 있습니다.
생성이 필요한 제품 대상의 속성은 서로 의존하고 생성 순서를 지정해야 한다.
객체의 작성 프로세스는 해당 객체를 작성하는 클래스와 독립적입니다.건설자 모델에 지휘자 클래스를 도입하여 창설 과정을 지휘자 클래스에 봉하고 건설자 클래스에 봉하지 않는다.
복잡한 객체의 작성 및 사용을 격리하고 동일한 작성 프로세스를 통해 다른 제품을 작성할 수 있습니다.
참조 블로그:
http://blog.csdn.net/jason0539/article/details/44992733
http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/builder.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
복잡한 대상의 조립과 창설-건설자 모델(셋째):Director의 토론, 모델 총결일부 경우 시스템 구조를 단순화하기 위해 Director와 추상 작성자 Builder를 통합하고 Builder에서 복잡한 제품 객체를 단계적으로 구축하는 construct() 방법을 제공할 수 있습니다.Builder...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.