디자인 모델 의 BuliderPattern 건설 자 모델
7475 단어 디자인 모드
작성 자 (Builder) 모드 정의:
복잡 한 대상 의 구 조 를 그 표현 과 분리 시 켜 같은 구축 과정 에서 서로 다른 표현 을 만 들 수 있 도록 하 는 것 을 말한다. 이런 디자인 모델 은 건축 자 모델 이 라 고 불 린 다.그것 은 복잡 한 대상 을 여러 개의 간단 한 대상 으로 분해 한 후에 한 걸음 한 걸음 구축 한 것 이다.그것 은 변 하지 않 는 것 과 분 리 될 것 이다. 즉, 제품 의 구성 부분 은 변 하지 않 지만 모든 부분 은 유연 하 게 선택 할 수 있다.
이 모델 의 주요 장점:
1. 각 구체 적 인 건설 자 는 서로 독립 되 고 시스템 의 확장 에 유리 하 다.2. 클 라 이언 트 는 제품 내부 로 구 성 된 세부 사항 을 알 필요 가 없고 세부 적 인 위험 을 통제 하기 쉽다.
마찬가지 로 주요 단점:
1. 제품 의 구성 부분 이 똑 같 아야 하기 때문에 사용 범 위 를 제한 합 니 다.2. 제품 의 내부 변화 가 복잡 하면 이 모델 은 많은 건축 자 류 를 증가 할 것 이다.3. 건축 자 (Builder) 모델 과 공장 모델 의 관심 사 는 다르다. 건축 자 모델 은 부품 의 조립 과정 을 중시 하고 공장 방법 모델 은 부품 의 설립 과정 을 더욱 중시 하지만 이들 은 결합 하여 사용 할 수 있다.
건설 자 모델 의 구조
건설 자 (Builder) 모델 은 제품, 추상 적 인 건설 자, 구체 적 인 건설 자, 지휘자 등 4 가지 요소 로 구성 되 어 있 으 며, 이제 그 기본 구조 와 실현 방법 을 분석 해 보 자.
주요 역할 은 다음 과 같다.
1. 제품 역할 (Product): 여러 구성 부품 을 포함 하 는 복잡 한 대상 으로 구체 적 인 건축 자가 각 부품 을 만 듭 니 다.2. 추상 적 인 건축 자 (Builder): 제품 의 각 하위 부품 을 만 드 는 추상 적 인 방법 을 포함 하 는 인터페이스 로 복잡 한 제품 으로 돌아 가 는 방법 getResult () 도 포함한다.3. 구체 적 인 건축 자 (Concrete Builder): 추상 적 인 건축 자 인 터 페 이 스 를 실현 하고 복잡 한 제품 의 각 부품 의 구체 적 인 생 성 방법 을 완성 합 니 다. 4. 지휘자 (Director): 건축 자 대상 중의 부품 구조 와 조립 방법 을 호출 하여 복잡 한 대상 의 생 성 을 완성 합 니 다. 스윙 자 에서 구체 적 인 제품 의 정 보 를 언급 하지 않 습 니 다.
건설 자 (Builder) 모델 의 구체 적 인 실현
A. 추상 적 인 제품 캐릭터 (Product):
public abstract class CarModel {
//
private ArrayList sequence = new ArrayList<>();
//
protected abstract void start();
// , ,
protected abstract void stop();
// , ,
protected abstract void alarm();
// ,
protected abstract void engineBoom();
// , , ,
final public void run() {
// , ,
for (int i = 0; i < this.sequence.size(); i++) {
String actionName = this.sequence.get(i);
// start , ;// stop ,
if (actionName.equalsIgnoreCase("start")) {
this.start();
} else if (actionName.equalsIgnoreCase("stop")) {
this.stop();
// alarm , ; engineboom ,
} else if(actionName.equalsIgnoreCase("alarm")){
this.alarm();
}else if(actionName.equalsIgnoreCase("engine boom")) {
this.engineBoom();
}
}
}
//
final public void setSequence(ArrayList sequence) { this.sequence = sequence; }
}
B1, 제품 캐릭터 (Product): 벤츠 모델
public class BenzModel extends CarModel {
@Override
protected void alarm() {
System.out.println(" ...");
}
@Override
protected void engineBoom() {
System.out.println(" ...");
}
@Override
protected void start() {
System.out.println(" ...");
}
@Override
protected void stop() {
System.out.println(" ...");
}
}
B2, 제품 캐릭터 (Product): BMW 모델
public class BMWModel extends CarModel {
@Override
protected void alarm() {
System.out.println(" ...");
}
@Override
protected void engineBoom() {
System.out.println(" ...");
}
@Override
protected void start() {
System.out.println(" ...");
}
@Override
protected void stop() {
System.out.println(" ...");
}
}
C. 추상 적 인 건축 자 (Builder): 제품 의 각 하위 부품 을 만 드 는 추상 적 인 방법 을 포함 하 는 인터페이스 나 추상 적 인 유형 으로 복잡 한 제품 으로 돌아 가 는 방법 getResult (), 예 를 들 어 이곳 의 getCarModel () 도 포함한다.
public abstract class CarBuilder {
// , ,
public abstract void setSequence(ArrayList sequence);
// ,
public abstract CarModel getCarModel();
}
D1, 구체 적 인 건축 자 (Concrete Builder): 추상 적 인 건축 자 인 터 페 이 스 를 실현 하고 복잡 한 제품 의 각 부품 의 구체 적 인 구축 방법 을 완성 합 니 다.
public class BenzBuilder extends CarBuilder {
private BenzModel benz = new BenzModel();
@Override
public CarModel getCarModel() {
return this.benz;
}
@Override
public void setSequence(ArrayList sequence) {
this.benz.setSequence(sequence);
}
}
D2, 체 건설 자 (Concrete Builder): 추상 적 인 건설 자 인 터 페 이 스 를 실현 하고 복잡 한 제품 의 각 부품 의 구체 적 인 생 성 방법 을 완성 합 니 다.
public class BMWBuilder extends CarBuilder {
private BMWModel bmw = new BMWModel();
@Override
public CarModel getCarModel() {
return this.bmw;
}
@Override
public void setSequence(ArrayList sequence) {
this.bmw.setSequence(sequence);
}
}
E. 지휘자: 건축 자 대상 중의 부품 구조 와 조립 방법 을 호출 하여 복잡 한 대상 의 생 성 을 완성 하고 지휘자 에서 구체 적 인 제품 의 정 보 를 언급 하지 않 는 다.
public class Director {
private ArrayList sequence = new ArrayList();
private BenzBuilder benzBuilder = new BenzBuilder();
private BMWBuilder bmwBuilder = new BMWBuilder();
/**
* A , start, stop, ,
*/
public BenzModel getABenzModel() {
// ,
this.sequence.clear();
// ABenzModel
this.sequence.add("start");
this.sequence.add("stop");
//
this.benzBuilder.setSequence(this.sequence);
return (BenzModel) this.benzBuilder.getCarModel();
}
/**
* B , , , ,
*/
public BenzModel getBBenzModel() {
this.sequence.clear();
this.sequence.add("engine boom");
this.sequence.add("start");
this.sequence.add("stop");
this.benzBuilder.setSequence(this.sequence);
return (BenzModel) this.benzBuilder.getCarModel();
}
/**
* C ( ), ,
*/
public BMWModel getCBMWModel() {
this.sequence.clear();
this.sequence.add("alarm");
this.sequence.add("start");
this.sequence.add("stop");
this.bmwBuilder.setSequence(this.sequence);
return (BMWModel) this.bmwBuilder.getCarModel();
}
/**
* D , , , ,
*/
public BMWModel getDBMWModel() {
this.sequence.clear();
this.sequence.add("start");
this.bmwBuilder.setSequence(this.sequence);
return (BMWModel) this.bmwBuilder.getCarModel();
}
/**
* , , , ,
* ,
*/
}
F. 클 라 이언 트 호출
public class CarBuilderClient {
public static void main(String[] args) {
Director director = new Director();
//12 A
for (int i = 0; i < 12; i++) {
director.getABenzModel().run();
}
//12W B
for (int i = 0; i < 12; i++) {
director.getBBenzModel().run();
}
//12 C
for (int i = 0; i < 12; i++) {
director.getCBMWModel().run();
}
//12 D
for (int i = 0; i < 12; i++) {
director.getDBMWModel().run();
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.