디자인 모델 의 건설 모델
6923 단어 디자인 모드
사실 나 도 블 로 거들 이 쓴 디자인 모델 을 많이 봤 는데, 많 든 적 든 모두 잊 어 버 렸 다.
오늘 은 마침내 내 가 쓴 것 이다. 그렇게 어렵 고 딱딱 하 게 내 가 표현 하고 싶 은 것 을 모두 표현 하지 않 았 으 면 좋 겠 다.
이것 이 예 사 롭 지 않 은 시리즈 이 기 를 바 랍 니 다. 그것 이 당신 에 게 도움 이 되 기 를 바 랍 니 다. "
2. 한 이야기 부터 시작 하 자
어느 날, 여 와 는 진흙 인형 을 빚 어서 지 쳤 다.그래서 그녀 는 하청 업 체 를 찾 았 다. 그녀 는 하청 업 체 에 게 말 했다. "너 는 나 를 도와 사람 을 잡 을 수 있 는 신선 을 몇 명 찾 아 줘. 그들 에 게 나 를 도와 달라 고 해."그 러 자 청부업자 가 승낙 하고 청부업자 가 여 와 에 게 물 었 다. "이 사람 에 게 무슨 약속 조건 이 있 느 냐?"그 러 자 여 와 는 그 에 게 대답 했다." 있 습 니 다. 제 조건 은 앞으로 모든 사람 이 자기 소 개 를 할 때 순서 가 자 유 롭 게 통제 되 어야 한 다 는 것 입 니 다. 제 가 그 에 게 자신의 이름 을 먼저 말 하 라 고 했 습 니 다. 제 가 그 에 게 자신의 성별 을 먼저 말 하 라 고 했 더 니 그 는 자신의 성별 을 먼저 말 해 야 했 습 니 다. "
도 급 꾼 은 사람 을 만 드 는 신선 을 찾 았 지만 신선 들 은 한 가지 성별 만 만 만 드 는 사람 이 었 습 니 다. 그래서 도 급 꾼 은 남 자 를 만 드 는 신선 을 한 곳 에 모 았 고 여 자 를 만 드 는 신선 을 한 곳 에 모 았 습 니 다. 그들 에 게 말 했 습 니 다."각 노선 의 신선, 우리 의 이번 임 무 는 여 와 가 사람 을 빚 는 것 을 돕 는 것 이다. 지금 나 는 가장 기본 적 인 사람 을 빚 는 규칙 을 말 하 겠 다. 우리 가 빚 은 사람 은 모두 여 와 로 하여 금 그들 이 자기소개 하 는 순 서 를 규정 하 게 해 야 한다. 그리고 모두 가 빚 어야 할 사람 은 사람 이다. 이 규칙 은 모든 신선 에 게 효과 가 있 기 때문에 이 규칙 은 구체 적 으로 어떤 성의 사람 인지 말 할 수 없다."자, 내 가 다 설명 했다. 조금 있 으 면 여 와 가 물건 을 요구 할 것 이다. 모두 서둘러 일 하 자.
이 야 기 를 끝 냈 습 니 다. 건축 모델 의 주요 유형 과 참여 자 들 도 모두 위 에 있 습 니 다. 제 가 굵 은 곳 과 빨간색 을 표시 하 는 말 을 기억 하 세 요. 다음은 코드 로 신선 들 에 게 집 어 줍 니 다!
3. 그럼 코드 로 사람 을 만들어 볼 까요?
분석: 신선 들 이 남자 / 여 자 를 만 들 려 고 하 는 것 같 으 니 이 두 가지 부터 시작 하 자.
/**
*
* @author liyichen
*
*/
public class Man extends AbstractHuman{
private String name;
private Integer sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
@Override
protected void sayName() {
System.out.println(" :"+this.name);
}
@Override
protected void saySex() {
System.out.println(" :"+(this.sex <= 1 ? " " : " "));
}
public Man(String name, Integer sex) {
super();
this.name = name;
this.sex = sex;
}
}
/**
*
* @author liyichen
*
*/
public class Female extends AbstractHuman{
private String name;
private Integer sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
@Override
protected void sayName() {
System.out.println(" :"+this.name);
}
@Override
protected void saySex() {
System.out.println(" :"+(this.sex <= 1 ? " " : " "));
}
public Female(String name, Integer sex) {
super();
this.name = name;
this.sex = sex;
}
}
어? AbstractHuman 은 무엇 일 까요? 여러분 은 이야기 속 여 와 의 요 구 를 기억 하 십 니까? 틀림 없습니다. 바로 이런 종류 입 니 다. 그것 은 추상 화 되 었 습 니 다.
/**
*
* @author liyichen
*
*/
public abstract class AbstractHuman {
// flag
private Integer initSequence ;
protected abstract void sayName();
protected abstract void saySex();
public final void show() {
if(this.initSequence <= 1) {
//
sayName();
saySex();
}else {
//
saySex();
sayName();
}
}
public final void setInitSequence(Integer i) {
this.initSequence = i;
}
}
다음은 뭐 가 부족 할 까? 우 리 는 사람의 신선 을 만 들 것 이다. 아직 은 두 파 의 신선 을 만 들 것 이다.
/**
*
* @author liyichen
*
*/
public class ManBuilder extends AbstractBuilder{
private Man man = new Man(" ",1);
@Override
public void setInitSqe(Integer i) {
man.setInitSequence(i);
}
@Override
public AbstractHuman getHuman() {
return this.man;
}
}
**
*
* @author liyichen
*
*/
public class FemaleBuilder extends AbstractBuilder{
private Female female = new Female(" ",2);
@Override
public void setInitSqe(Integer i) {
female.setInitSequence(i);
}
@Override
public AbstractHuman getHuman() {
return this.female;
}
}
어? 여기 왜 또 하나의 Abstract Builder 가 있 지?
/**
*
* @author liyichen
*
*/
public abstract class AbstractBuilder {
//
public abstract void setInitSqe(Integer i);
//
public abstract AbstractHumanProduct getHuman();
}
모든 것 이 다 되 었 습 니 다. 우리 신선 들 은 이미 준 비 를 마 쳤 습 니 다. 도 급 업자 의 명령 만 기다 리 면 일 을 시작 할 수 있 습 니 다. 이제 도 급 업자 도 깜짝 등장 하 게 합 시다.
/**
* ,
* :1. ( )
* 2. ( ) ( )
* @author liyichen
*
*/
public class Director {
private ManBuilder manBui = new ManBuilder();
private FemaleBuilder femaleBui = new FemaleBuilder();
private Integer initSeq = -1; // flag
public Man getMan() {
//
this.initSeq = 1;
manBui.setInitSqe(this.initSeq);
return (ManProduct) this.manBui.getProduct();
}
public Female getFemale() {
//
this.initSeq = 2;
femaleBui.setInitSqe(this.initSeq);
return (FemaleProduct) this.femaleBui.getProduct();
}
}
오직 여 와 가 와 서 사람 을 요구 하 기 를 기다 릴 뿐이다.
**
*
* , builder
* @author liyichen
*
*/
public class ClientMain {
public static void main(String[] args) {
Director dir = new Director();
Man man = dir.getMan();
man.show();
Female female = dir.getFemale();
female.show();
}
}
이로써 우리 의 구조 모델 은 이미 다 말 했 습 니 다. 여러분 은 각 유형 에 따라 방금 제 가 표시 한 관건 적 인 사람과 규정 을 반복 해서 볼 수 있 습 니 다. 어떻게 유형 과 대응 하 는 지 보 세 요.
총화
사실 여 와 는 우리 입 에서 나 오 는 상류 층 의 전용자 이다. 그녀 가 진흙 인형 을 필요 로 할 때, 그녀 는 단지 도 급 공 두 를 찾 아서, 도 급 공 두 가 각 신선 (건설 자) 을 조직 하여 만 들 었 으 면 좋 겠 다. 만약 어느 날 또 새로운 성별 을 가 진 사람 이 늘 어 나 면, 대응 하 는 종류 와 신선 (건설 자) 만 늘 려 야 한다.좋 습 니 다. 청부업자 가 당연히 이 일 을 알 게 되 었 습 니 다. 왜냐하면 그 는 새로운 성별 을 빚 을 신선 을 다시 찾 아야 하기 때 문 입 니 다. 그러나 여 와 는 그녀 에 게 관심 이 없 었 습 니 다. 청부업자 가 나 에 게 진흙 인형 (Abstract Human) 을 빚 어 줄 수 있다 는 것 만 알 았 으 면 좋 겠 습 니 다.
우 리 는 건축 모델 의 몇 가지 관건 적 인 인물 을 정리 해 보 자.
제품 류 (바로 이야기 속 의 남자 / 여자, 보통 템 플 릿 방법 (바로 AbstractHuman) 을 실현 합 니 다.
추상 적 인 건축 자 (일반적으로 하위 류 에서 실현 되 는 것 이 바로 도 급 업자 의 규정)
구체 적 인 건설 자.
감독 류
그럼 언제 건설 모델 을 사용 합 니까? 사실은 매우 간단 합 니 다. 여러분 은 건설 모델 이 운행 결 과 를 제어 하 는 이런 조작 이 있 는 것 을 발견 하 셨 습 니까? 그래서:
1. 같은 방법, 서로 다른 집행 순서, 서로 다른 사건 결과 가 발생 할 때 사용 할 수 있다.
2. 여러 개의 부품 이나 부품 (이름 소개, 성별 소개) 을 한 대상 에 조립 할 수 있 으 나 운행 결과 가 다 르 기 때문에 사용 할 수 있 습 니 다.
3. 제품 류 가 매우 복잡 하거나 제품 류 에서 사용 하 는 순서 가 다 르 기 때문에 서로 다른 효능 이 생 겼 을 때 사용 할 수 있다.
또 하 나 는 건설 모델 과 공장 모델 의 가장 큰 차이 점 은 건설 모델 이 부품 류 와 조립 공정 (사실은 집행 순서) 을 더욱 중시 하고 공장 은 이 문제 에 관심 을 가지 지 않 는 다 는 것 이다. 같은 건설 모델 이지 만 관심 사 는 다르다!
마지막
본 논문 이 당신 에 게 도움 이 되 기 를 바 랍 니 다. 또한 학습 은 끝 이 없습니다. 정확 하지 않 은 부분 이 있 으 면 댓 글 이 바로 보 이 는 것 을 환영 합 니 다. 제때에 수정 해 주 셔 서 감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.