Command Pattern

Learning/Design Pattern 2010.02.14 23:36
커맨드 패턴은 객체를 주체적으로 활동하는 것이 아니라 명령을 내려야만 동작하는 수동적인 대상으로 만듭니다.


위의 그림에서 TV는 리시버(Receiver)를 나타냅니다. 자신의 API를 공개하고 누구든지 자기에게 명령을 내릴 때까지 기다립니다.
여기서 StartOnTVButton은 커맨드(Command) 객체입니다. press 메소드(=execute 메소드)를 구현하고 있으며, 버튼이 눌리는 순간 press()를 호출합니다. 또한 자신이 어떤 TV를 동작시켜야 하는지 알아야 하기 때문에 TV의 객체를 가지고 있습니다.
여기서 설명하지 못한 인보커(Invoker)는 모든 버튼이 어디에 있는지 알고 있으며, 버튼이 눌리면 정확히 누가 눌렸는지 알아내서 그 객체의 press() 메소드를 호출해줍니다. 즉, TV에 필요한 모든 버튼들의 객체를 가지고 있습니다. 모두 버튼(버튼 인터페이스 구현체)이어야 합니다. 스위치면 안됩니다.

커맨드 패턴을 사용하면 전에 눌린 버튼을 기억하거나 이전 상태값을 기억해서 되돌릴 수 있는 Undo기능을 쉽게 구현할 수 있고, 여러 기능들을 한 데 묶어 실행하는 매크로 버튼을 만들 수도 있습니다.


참고 : Head First 디자인 패턴 6장 커맨드 패턴
저작자 표시 비영리
신고
posted by purecolor


티스토리 툴바