Head First 디자인 모드 - 명령 모드
정 의 를 처음 봤 을 때 추상 적 이 었 다. '요청' 이 무엇 인지.
"하나의 기술 은 종종 하나의 문제 의 출현 과 함께 나타난다." 우 리 는 왜 이 모델 이 나 타 났 는 지 생각해 야 한다.이 모델 은 도대체 어떤 좋 은 점 이 있 습 니까?
책 에서 먼저 제기 한 수 요 는 "회 사 는 가전제품 자동화 리모컨 의 API 를 설계 하려 고 한다. 회 사 는 일부 업 체 (예 를 들 어 전등, 텔레비전) 가 있 고 리모컨 도 하나 있다. 리모컨 은 7 개의 프로 그래 밍 가능 한 슬롯 (각 슬롯 마다 다른 전기 장 치 를 지정 할 수 있다) 이 있 고 모든 슬롯 에 해당 하 는 스위치 버튼 이 있 으 며 취소 버튼 도 있다."
수 요 를 받 았 을 때 제조 업 체 클래스 가 7 개 라면 좋 겠 습 니 다. 저 는 직접 명령 을 버튼 에 기록 하 겠 습 니 다.그러나 제조 업 체 류 는 7 개 뿐만 아니 라 10 여 개, 심지어 백 개 에 달 할 수 있다.리모컨 을 몇 개 썼 다 면 스마트 리모컨 이 라 고 할 수 있 을 까?그래서 이렇게 디자인 하면 안 돼 요.게다가 대상 을 향 한 사상 도 이렇게 하 는 것 을 제창 하지 않 는 다.그럼 어 떡 하지?
책 에서 식당 으로 명령 모드 를 끌 어 내 고 식당 에서
고객 은 주문 서 를 작성 하여 종업원 에 게 건 네 주 었 다.
종업원 은 주문 서 를 요리사 에 게 건 네 주 었 다.
주방장 이 주문 서 를 보고 정식 을 차 렸 다.
이 가운데 종업원 은 고객 이 무엇 을 원 하 는 지 알 고 주문 을 통 해 요리사 에 게 무엇 을 하 는 지 알려 주 었 다.종업원 은 요리사 가 어떻게 하 든 요리사 가 음식 을 만 들 줄 만 알 았 다.
우 리 는 이렇게 생각 할 수 있다. 종업원 은 요리사 가 음식 을 할 줄 안다 (종업원 이 주문 서 를 들 고 요리사 에 게 알 린 다). 종업원 은 "주문 이 왔 다" (종업원 이 orderUp () 을 호출 했다) 고 소 리 쳤 고 요리 사 는 소 리 를 듣 고 주문 서 를 보고 음식 을 준비 했다 (받 은 명령 에 따라 준비 했다).어떤 종업원 이 든 어떤 요리사 든 종업원 이 주문 서 를 요리사 에 게 준 후에 요리사 도 무엇 을 하 는 지 알 게 되 었 다. 요리 사 는 누가 주문 하 든 누가 보 냈 든 간 에.이렇게 주문 하면 고객 과 요리사 가 격 리 된다.
여기 서 우 리 는 고객 을 '요청 을 보 내 는 대상' 으로 생각 하고 요리 사 를 '요청 을 받 고 집행 하 는 대상' 으로 생각 하 며 주문 은 '요청 을 포함 하 는 대상' 이 아니다.
우리 의 요구 로 돌아 가면, 이때 우 리 는 제조 업 체 류 (등, 텔레비전) 를 요리사 (요청 을 받 고 실행 하 는 대상) 로 삼 을 수 있 는 지, 리모컨 을 주문 (요청 을 포함 하 는 대상) 으로 삼 을 수 있 는 지, 이곳 의 '요청' 은 바로 우리 의 명령 이다.
여기 서 명령 모드 가 나 타 났 습 니 다. 우 리 는 등 을 제어 하려 면 제어등 의 명령 을 써 야 합 니 다.텔레비전 을 제어 하려 면 텔레비전 을 제어 하 라 는 명령 을 써 야 한다.그래서 명령 에는 '수신 및 실행 요청 대상' 이 포함 되 어 있 습 니 다.그런 후에 우 리 는 많은 명령 을 써 야 하지만, 우리 의 리모컨 에는 모든 명령 이 포함 되 어 있 을 수 없다.그래서 여기 서 우 리 는 명령 인 터 페 이 스 를 만 들 려 고 합 니 다. 이 인터페이스 에서 실행 하 는 방법 (execute () 이 있 습 니 다. 모든 명령 은 이 인 터 페 이 스 를 실현 한 다음 에 실행 방법 에서 '수신 자' 가 해 야 할 동작 을 완성 해 야 합 니 다.
관련 코드 는 다음 과 같 습 니 다: 등 류 (제조 업 체 클래스)
public class Light {
public void off() {
System.out.println("Light is off!");
}
public void on() {
System.out.println("Light is on!");
}
}
명령 인터페이스
/**
*
**/
public interface Command{
public void execute();
}
명령 인터페이스의 제어등 명령 을 실현 하 다
/**
* ( )
**/
public class LightOnCommand implements Command{
//
Light light;
public LightOnCommand(Light light){
this.light=light;
}
// execute()
public void execute(){
//
light.on();
}
}
제어 장치 (리모컨)
public class SimpleRemoteControl{
//
Command command;
public SimpleRemoteControl(){}
//
public void setCommand(Command command){
this.command=command;
}
// ,
public void buttonWasPressed(){
//
this.command.execute();
}
}
테스트 고객
public class RemoteControlTest{
public static void main(String[] agrs){
// ( )
Light light = new Light();
// ( )
LightOnCommand lightOnCommand = new LightOnCommand (light);
// ( )
SimpleRemoteControl simpleRemoteControl = new SimpleRemoteControl();
//
simpleRemoteControl.setCommand(lightOnCommand );
// ( )
simpleRemoteControl.buttonWasPressed();
}
}
출력 결과: Light is on!
이로써 명령 모드 는 이미 원형 을 실현 했다.리모컨 은 7 개의 장치 만 제어 할 수 있 고 명령 모드 로 우 리 는 리모컨 을 바 꾸 지 않 아 도 편리 하 게 장 치 를 바 꿀 수 있다.
이 는 확장 개방, 수정 폐쇄 라 는 디자인 원칙 에 따 른 것 이다.인터페이스 프로 그래 밍 에 대해 프로 그래 밍 을 실현 하지 마 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.