JAVA 디자인 모드 - 명령 모드
'요청' 을 대상으로 봉하여 다른 요청, 대기열, 로그를 사용하여 다른 대상을 매개 변수화할 수 있도록 합니다.명령 모드에서도 취소 가능한 조작을 지원합니다.
우리는 명령 대상이 특정 수신자에 연결된 동작을 통해 요청을 봉인하는 것을 알고 있다.이 점을 달성하려면 명령 대상은 동작과 수신자를 대상에 포함시킨다.이 대상은excute () 방법만 노출되며, 이 방법이 호출되면 수신자가 이 동작을 합니다.밖에서 보면 다른 대상은 도대체 어떤 수신자가 어떤 동작을 했는지 모르고execute () 방법을 사용하면 요청의 목적을 달성할 수 있다는 것만 알 뿐이다.
구체적 예
모든 명령 대상이 같은 인터페이스를 사용합니다: Command.java
package com.designpattern.command;
public interface Command {
public void execute();
public void undo();
}
Light.java
package com.designpattern.command;
public class Light {
private boolean on = false;
public void on() {
this.on = true;
}
public void off() {
this.on = false;
}
public String getStatus() {
if (on) {
return "ON";
} else {
return "OFF";
}
}
}
불을 켠 명령 개체: OnCommand.java, 동작과 수신자 간의 귀속 관계를 정의합니다.호출자는execute () 방법을 호출하면 요청을 보내고 수신자의 한 동작 또는 여러 동작을 호출할 수 있습니다.
package com.designpattern.command;
public class OnCommand implements Command {
private Light light;
public OnCommand(Light l) {
this.light = l;
}
@Override
public void execute() {
light.on();
}
@Override
public void undo() {
light.off();
System.out.println("The light is off!");
}
}
불을 끄는 명령 개체: OffCommand.java package com.designpattern.command;
public class OffCommand implements Command {
private Light light;
public OffCommand(Light l){
this.light = l;
}
@Override
public void execute() {
light.off();
}
@Override
public void undo() {
light.on();
System.out.println("The light is on!");
}
}
빈 명령: NoCommand.java,null 처리의 책임을 빈 명령 대상에게 이전합니다. excute () 방법을 호출할 때, 이 대상은 아무것도 하지 않습니다.
package com.designpattern.command;
public class NoCommand implements Command {
@Override
public void execute() {
// TODO Auto-generated method stub
}
@Override
public void undo() {
// TODO Auto-generated method stub
}
}
호출자: Invoker.java, 명령 대상을 가지고 있으며, 어느 시점에 명령 대상의excute () 방법을 호출하여 요청을 실행에 옮깁니다.
package com.designpattern.command;
//
public class Invoker {
private Command command;
private Command undoCommand;
public Invoker() {
command = new NoCommand();
undoCommand = new NoCommand();
}
public void setCommand(Command c) {
this.command = c;
}
public void pressButton() {
this.command.execute();
undoCommand = command;
}
public void undoPress() {
undoCommand.undo();
}
}
테스트 클래스: Test.java, 구체적인 명령을 만들고 수신자를 설정합니다.
package com.designpattern.command;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Light light = new Light();
Command on = new OnCommand(light);// ,light
Command off = new OffCommand(light);
Invoker invoker = new Invoker();
invoker.setCommand(on);
invoker.pressButton();
invoker.undoPress();
System.out.println("Light "+light.getStatus());
}
}
주요 사항 요약
1. 명령 모드는 요청을 보내는 대상과 실행하는 대상을 결합시킨다.
2. 결합된 양자 간에 명령 대상을 통해 의사소통을 한다.명령 대상은 수신자와 한 조의 동작을 봉인했다.
3. 호출자는 명령 대상을 호출하는excute() 방법을 통해 요청을 보내면 수신자의 동작을 호출할 수 있다.
4. 호출자는 명령을 매개 변수로 받아들일 수 있고 심지어 실행할 때 동적으로 진행할 수 있다.
5, 명령은 취소를 지원할 수 있습니다. 방법은 undo () 방법으로execute ()가 실행되기 전의 상태로 돌아가는 것입니다.
6, 매크로 명령은 명령의 간단한 연장으로 여러 명령을 호출할 수 있다.매크로 방법도 취소를 지원할 수 있습니다.
7. 실제 작업을 할 때'똑똑한'명령 대상을 사용하는 것이 흔하다. 즉, 요청을 직접 실현하는 것이지 수취자에게 업무를 위탁하는 것이 아니다.
8. 명령은 로그와 사무 시스템을 실현하는 데도 사용할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.