Java 운용 디자인 모델 중의 건설자 모델 구축 프로젝트의 실례 해석
정의: 복잡한 대상 구축과 그 표현을 분리하여 같은 구축 과정에서 서로 다른 표현을 만들 수 있도록 한다.
핵심: 구축과 표시는 분리되고 구조와 표시는 다르다
추상적인 공장 모델과 구별:
(1) 추상적인 공장 모델과 비슷하다. 복잡한 대상을 만들 수 있기 때문이다.주요한 차이점은 건설자 모델은 한 걸음 한 걸음 복잡한 대상을 구축하는 데 중심을 두고 부품 유형과 조립 공정의 순서에 주목한다.추상적인 공장 모델은 여러 계열의 제품 대상(간단하거나 복잡한)에 중심을 둔다.건설자 모델은 마지막 단계에서 제품으로 돌아가고 추상적인 공장에 대해 말하자면 제품은 즉시 되돌아온다.
(2) 건설자 모델에서 어떤 지도자는 지도자가 건설자를 관리하고 사용자는 지도자와 연락하며 지도자가 건설자와 연락하여 제품을 얻는다.즉, 건설 모델은 단계적으로 진행되는 건설 과정을 강제적으로 실행할 수 있다.
2. 그의 역할
(1) 추상 작성자(Builder) 역할: 이 역할은 제품의 각 구성 부분을 규범화하고 추상화하는 데 사용되며 일반적으로 응용 프로그램의 논리에 독립적이다.
(2) 구체적인 작성자(ConcreteBuilder) 역할:
이 역할은 추상적인 건설자가 정의한 모든 방법을 실현하고 구축된 제품의 실례를 되돌려준다.
(3) 제품(Product) 역할:
이 역할은 건설 중의 복잡한 대상으로 하나의 시스템에 하나보다 많은 제품 종류가 있을 수 있다. 이런 제품들은 반드시 공공적인 인터페이스가 있는 것은 아니며 완전히 관련이 없을 수 있다.
(4) 지도자(Director) 역할:
이 역할은 기존 모듈의 순서를 배정하고 건설자 Builder에게 건설을 시작하라고 알려준다.
3. 실례
public interface Builder {
void buildPartA();
void buildPartB();
void buildPartC();
}
public class BuilderImpl implements Builder {
@Override
public void buildPartA() {
System.out.println(" A");
}
@Override
public void buildPartB() {
System.out.println(" B");
}
@Override
public void buildPartC() {
System.out.println(" C");
}
}
public class BuilderImpl2 implements Builder {
@Override
public void buildPartA() {
System.out.println(" AA");
}
@Override
public void buildPartB() {
System.out.println(" BB");
}
@Override
public void buildPartC() {
System.out.println(" CC");
}
}
/**
* :
* Builder
*/
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
/**
* :
* , new Director
*/
public void construct() {
System.out.println("director builder ");
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
}
}
public class Director2 {
private Builder builder;
public Director2(Builder builder) {
this.builder = builder;
}
/**
* :
* , new Director
*/
public void construct() {
System.out.println("director2 builder ");
builder.buildPartB();
builder.buildPartC();
builder.buildPartA();
}
}
public class Test {
public static void main(String[] args) {
Builder builder = new BuilderImpl();
Director director = new Director(builder);
/*
* , (buildPartA、buildPartB、buildPartC) , new builder
* ,new director
* , , new director,new builder
*/
director.construct();
System.out.println("");
Builder builder2 = new BuilderImpl2();
Director director2 = new Director(builder2);
director2.construct();
System.out.println("");
Builder builder3 = new BuilderImpl2();
Director2 director3 = new Director2(builder3);
director3.construct();
}
}
인쇄:
director builder
A
B
C
director builder
AA
BB
CC
director2 builder
BB
CC
AA
4. 장단점(1) 이점:
A. 제품의 내부 표시를 변경할 수 있습니다.
B. 봉인된 건물과 대표적인 코드.
C. 시공 공정을 초과하는 절차를 제어한다.
(2) 단점:
A. 다양한 유형의 개별 ConcreteBuilder를 만들어야 합니다.
5. 장면 사용:
(1) 복잡한 대상을 만드는 알고리즘이 그 대상의 구성 부분과 조립 방식에 독립해야 할 때.
(2) 구조 과정이 구조된 대상이 서로 다른 표시를 허용해야 할 때(같은 방법, 서로 다른 집행 순서, 서로 다른 결과가 발생할 때).
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.