티스토리 뷰
반응형
1. 커맨드 패턴의 개념
커맨드 패턴을 이용하면 요청하는 객체와 그 요청을 수행하는 객체를 분리시킬 수 있습니다.
여기서의 핵심은 분리시키기 위해 가장 필요한 커맨드 객체입니다.
리시버의 행동들을 캡슐화합니다.
Command Interface를 통해서 추상메소드를 호출할 수 있습니다.
각각의 Command들은 해당 리시버의 행동을 호출하게 됩니다.
Undo(작업취소 메소드)를 구현함으로 작업 취소 기능을 지원할 수 있습니다.
요청하는 객체(인보커) 자체는 고치지 않아도 되도록 하는 것에 가장 중점을 두었습니다.
요청하는 쪽과 수행하는 쪽을 분리시킴으로 느슨한 결합을 유지할 수 있습니다.
2. 클래스 다이어그램
3. 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | //Client int main() { //Create Class Receiver receiver = new Receiver(); ICommand command = new ConcreteCommand(receiver); Invoker invoker = new Invoker(); //Set Command invoker->SetCommand(command); invoker.ExecuteCommand(); } class ICommand { protected: Receiver* receiver; public: ICommand(Receiver* pReceiver) { receiver = pReceiver; } virtual void execute() = 0; } //ConcreteCommand header class ConcreteCommand : public ICommand { public: ConcreteCommand(Receiver* pReceiver); virtual void execute(); } //end header //ConcreteCommand body ConcreteCommand(Receiver* pReceiver) : ICommand(pReceiver) { } void ConcreteCommand::execute() { receiver->sil_hang(); } //end body //Receiver header class Receiver { public: Receiver(); void sil_hang(); } //end header //Receiver body Receiver() { } void Receiver::sil_hang(); { TRACE("WoW Fantastic Baby"); } //end body //Invoker header class Invoker { public: Invoker(); void setCommand(ICommand* pCommand); void executeCommand(); private: ICommand command; }//end header //Invoker body Invoker() { } void Invoker::setCommand(ICommand* pCommand); { command = pCommand; } void Invoker::ExecuteCommand() { command.execute(); } //end body |
4. 마무리
- 각각의 행동을 객체로 캡슐화 하기 때문에 행동에 대한 확장성이 좋다고 볼 수 있습니다.
- 하나의 행동객체는 하나의 행동만을 수행하는 것이 핵심입니다.
- 객체지향 원칙의 단일책임원칙에 해당하는 부분임을 알 수가 있습니다.(책임을 각자 가져가는것)
- 명령어(Command)를 처리하는 부분을 객체로 캡슐화 함으로 실제 구현을 다른 객체들로부터 독립시키는 것에 있습니다.
- 실생활에서도 비슷한 상황이 있습니다.
반응형
'04.기타' 카테고리의 다른 글
[Tip] [Excel] 문서 실행 시 단독으로 새창에서 열기 (0) | 2017.02.21 |
---|---|
[Python] 설치 : 파이썬 설치하기 (0) | 2016.05.11 |
[디자인패턴] 객체지향의 5대 원칙 (0) | 2014.08.14 |
[Tip] 지메일(Gmail) 필터 만들기 (0) | 2014.02.24 |
[Tip] VS에서 검색 에러 No files were found to look in... (0) | 2014.02.19 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 중곡동
- IOS
- 단축키
- flutter
- flutter_launcher_icons
- 명령어
- 스마트포토
- tip
- CentOS
- prebuilt
- AWS
- Android
- RDS
- 안드로이드 스튜디오
- windows
- vscode
- NPM
- 독산시대
- Qt Creator
- GIT
- nodejs
- MAC
- mariadb
- 윈도우
- electron
- 몽고DB
- portrait
- vs code
- EC2
- 맥
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함