커멘드 패턴은 간단하게 말하면 호출 캡슐화 - 함수 호출을(명령, 메시지) 캡슐화 한 후에 대리자(invoker)를 통해서 간접적으로 명령을 실행시키는 방법. 재사용성이 높은 클래스를 설계하는 패턴.
-이벤트가 발생했을때 실행될 기능이 다양하면서도 변경이 필요할 수 있을때 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할때 유용함. (갈아끼우기쉬움 if문 없애기)
-실행할 함수의 캡슐화로 Invoker 클래스와 Receiver 클래스 사이의 의존성을 제거함. => 실행될 기능의 변경에도 Invoker 클래스의 수정 없이 그대로 사용 가능.
command 객체의 본질 : [receiver reference, method reference, argument reference]의 조합. Java의 reflection 기능(object나 class reference로부터 특정 member function의 위치값 알아내는 기능, RTTI기술도 reflection의 일종인걸로 앎)을 이용하면 method reference도 이용 가능.
command.execute();
┕> x.move(10,20); => a , p.draw(g); => b
┕> a.execute(); . b.execute();
ㆍCommand : 실행될 기능에 대한 인터페이스, 실행될 기능을 execute 메서드로 선언
ㆍConcreteCommand : 실제로 실행되는 기능을 구현, Command라는 인터페이스를 구현
ㆍInvoker : 기능의 실행을 request하는 호출자 클래스
ㆍReceiver : ConcreteCommand에서 execute 메서드를 구현할 때 필요한 클래스, ConcreteCommand의 기능을 실행하기 위해 사용하는 수신자 클래스
public class SimpleRemoteControl {
Command slot;
public SimpleRemoteControl() {}
public void setCommand(Command command) {
slot = command;
}
public void buttonWasPressed() {
slot.execute();
}
}
커멘드 패턴 추가 기능
- Undo : 가장 최근의 명령어를 취소하는 기능 (execute명령어랑 대치되게)
- Macro command : 여러개의 명령어를 일괄적으로 처리
'Design Pattern' 카테고리의 다른 글
디자인 패턴 - Composite Pattern (0) | 2022.04.16 |
---|---|
디자인 패턴 - Template Method pattern (0) | 2022.04.12 |
디자인 패턴 - Iterator pattern (0) | 2022.04.12 |
디자인 패턴 - Facade pattern (0) | 2022.04.12 |
디자인 패턴 - adapter pattern (0) | 2022.04.10 |
댓글