디자인 모드 12 - 명령 모드

13444 단어 디자인 모드
글 목록
  • 1. 명령 모드
  • 2. 예
  • 명령 모드
    명령 모드 는 대상 행위 모드 로 하나의 요청 을 하나의 대상 으로 봉 하여 서로 다른 요청 으로 고객 을 매개 변수 화 할 수 있다.요청 대기 열 이나 요청 로 그 를 기록 하고 취소 가능 한 동작 을 지원 합 니 다.
    요청 을 보 낸 대상 은 요청 을 어떻게 보 내 는 지 알 기만 하면 요청 을 어떻게 완성 하 는 지 알 필요 가 없다.
    두 번 째, 예
    아래 의 예 에서 클 라 이언 트 가 서로 다른 요청 을 서버 에서 처리 하 는 방법 에 따라 인터페이스 가 일치 하지 않 기 때문에 이 요청 들 을 하나의 인터페이스 AbstractCmd 로 통일 시 켜 야 합 니 다. 그러면 이 요청 들 을 서버 에 통일 적 으로 실행 할 수 있 습 니 다.
    요청 이 오 면 new 와 같은 대상 을 서버 대기 열 에 넣 고 서버 측 이 스스로 처리 하도록 하면 됩 니 다.
    #include 
    #include 
    #include 
    using namespace std;
    
    class HandleProto {
         
    public:
    	//      1          
    	void process1() {
         
    		cout << "process1...
    "
    ; } void process2() { cout << "process2...
    "
    ; } void process3() { cout << "process3...
    "
    ; } }; // class AbstractCmd { public: virtual void handle() = 0; }; class Process1Cmd : public AbstractCmd { public: Process1Cmd(HandleProto* proto) { p_proto = proto; } virtual void handle() { p_proto->process1(); } HandleProto* p_proto; }; class Process2Cmd : public AbstractCmd { public: Process2Cmd(HandleProto* proto) { p_proto = proto; } virtual void handle() { p_proto->process2(); } HandleProto* p_proto; }; class Process3Cmd : public AbstractCmd { public: Process3Cmd(HandleProto* proto) { p_proto = proto; } virtual void handle() { p_proto->process3(); } HandleProto* p_proto; }; class Server { public: void addRequest(AbstractCmd* cmd) { qCmds.push(cmd); } void startHandle() { while (!qCmds.empty()) { AbstractCmd* cmd = qCmds.front(); cmd->handle(); qCmds.pop(); Sleep(2000); } } queue<AbstractCmd*> qCmds; }; void test() { HandleProto* protocol = new HandleProto; // AbstractCmd* process1 = new Process1Cmd(protocol); AbstractCmd* process2 = new Process2Cmd(protocol); AbstractCmd* process3 = new Process3Cmd(protocol); Server* server = new Server; // server->addRequest(process1); server->addRequest(process2); server->addRequest(process3); // server->startHandle(); } int main() { test(); return 0; }

    좋은 웹페이지 즐겨찾기