요구사항(요청, 명령)을 객체로 캡슐화 시킨다.
다른 요구사항을 지닌 클라이언트를 매개변수화 시킬 수 있고, 요구사항을 큐에 넣거나 로그로 남길 수 있으며 작업 취소 기능을 지원할 수도 있다.
행동과 리시버를 한 객체에 집어넣고, execute()라는 메소드 하나만 외부에 공개한다.
사용하려는 객체가 많고, API가 서로 다른 경우 번거로움이 존재한다.
Invoker(버튼 클릭하면 기능 수행) - Command(연결, wrapper 역할 즉, 감춰줌) - Receiver(실제 객체)
→ 요구, 처리 객체를 분리하고 있다.
//커맨드 객체는 모두 같은 인터페이스를 구현해야 한다.
public interface Command {
public void execute();
}
public class LightOnCommand implements Command{
Light light;
public LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.on();
}
//command.excute로 실제 객체를 실행 해줌
}
public class SimpleRemoteControl {
Command slot;
public SimpleRemoteControl() {
}
public void setCommand(Command command){
slot = command;
}
public void buttonWasPressed(){
slot.execute();
}
}