요구사항을 캡슐화 하는 것으로 클라이언트와 리시버 사이의 의존성을 제거하는 패턴.
//Command interface. 모든 Command는 이 interface를 구현해야 함.
public interface Command {
public void excute ();
public void undo ();
}
// Command 구현 클래스
public CommandImpl implements Command {
public CommandImpl(...) {}
public void excute () {...}
public void undo () {...}
}
//컨트롤러 클래스
public class Controller {
Command command;//캡슐화 된 커맨드
public void setCommand(Command command) {...}
//커맨드 타입에 상관없이 excute라는 동일한 메소드를 실행하지만
//실행되는 내용은 구현 클래스에 따라 다른게 포인트.
public void action() {command.excute();}
}