사용자 도구
관리
로그인
추적:
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Command 패턴 ====== ===== 타입 ===== Behavioral Pattern ===== 문제 ===== ===== 해결 ===== ===== 클래스 다이어그램 ===== {{:programming:design_pattern:command.png|}} ===== 예제 ===== <file cpp command.cpp> #include <iostream> using namespace std; class Giant { public: Giant() { m_id = s_next++; } void fee() { cout << m_id << "-fee "; } void phi() { cout << m_id << "-phi "; } void pheaux() { cout << m_id << "-pheaux "; } private: int m_id; static int s_next; }; int Giant::s_next = 0; class Command { public: typedef void(Giant:: *Action)(); Command(Giant *object, Action method) { m_object = object; m_method = method; } void execute() { (m_object->*m_method)(); } private: Giant *m_object; Action m_method; }; template <typename T> class Queue { public: Queue() { m_add = m_remove = 0; } void enque(T *c) { m_array[m_add] = c; m_add = (m_add + 1) % SIZE; } T *deque() { int temp = m_remove; m_remove = (m_remove + 1) % SIZE; return m_array[temp]; } private: enum { SIZE = 8 }; T *m_array[SIZE]; int m_add, m_remove; }; int main() { Queue<Command> que; Command *input[] = { new Command(new Giant, &Giant::fee), new Command(new Giant, &Giant::phi), new Command(new Giant, &Giant::pheaux), new Command(new Giant, &Giant ::fee), new Command(new Giant, &Giant::phi), new Command(new Giant, &Giant::pheaux) }; for (int i = 0; i < 6; i++) que.enque(input[i]); for (int i = 0; i < 6; i++) que.deque()->execute(); cout << '\n'; } </file> ===== 참고 ===== http://en.wikibooks.org/wiki/C%2B%2B_Programming/Code/Design_Patterns#Command
문서 도구
문서 보기
이전 판
역링크
PDF로 내보내기
맨 위로
PDF Export
내용으로 건너뛰기
OBG WiKi
사이트 도구
검색
최근 바뀜
미디어 관리자
사이트맵