标签:
其实命令模式百度已经解释的非常全面了,这里粘贴下来再对照大话设计模式C++版中的例子,供自己学习参考用。
1 #include "stdafx.h" 2 #include <iostream> 3 #include <string> 4 using namespace std; 5 6 // 请求 7 class Request 8 { 9 public: 10 int m_nNumber; 11 }; 12 13 // 管理者 14 class Manager 15 { 16 public: 17 Manager(string temp) { name = temp; } 18 void SetSuccessor(Manager* temp) { manager = temp; } 19 virtual void GetRequest(Request* request) = 0; 20 protected: 21 Manager* manager; 22 string name; 23 }; 24 25 // 经理 26 class CommonManager : public Manager 27 { 28 public: 29 CommonManager(string strTemp) : Manager(strTemp) {} 30 virtual void GetRequest(Request* request) 31 { 32 if (request->m_nNumber>=0 && request->m_nNumber<1000) 33 { 34 cout << name << " 处理了请求: " << request->m_nNumber << endl; 35 } 36 else 37 { 38 manager->GetRequest(request); 39 } 40 } 41 }; 42 43 // 总监 44 class Majordomo : public Manager 45 { 46 public: 47 Majordomo(string strTemp) : Manager(strTemp) {} 48 virtual void GetRequest(Request* request) 49 { 50 if (request->m_nNumber <= 5000) 51 { 52 cout << name << " 处理了请求: " << request->m_nNumber << endl; 53 } 54 else 55 { 56 manager->GetRequest(request); 57 } 58 } 59 }; 60 61 //总经理 62 class GeneralManager: public Manager 63 { 64 public: 65 GeneralManager(string name):Manager(name) {} 66 virtual void GetRequest(Request* request) //总经理可以处理所有请求 67 { 68 cout << name << " 处理了请求: " << request->m_nNumber << endl; 69 } 70 }; 71 72 int main() 73 { 74 Manager* common = new CommonManager("张经理"); 75 Manager* major = new Majordomo("李总监"); 76 GeneralManager* general = new GeneralManager("赵总"); 77 // common对象的SetSuccessor函数中传递major对象的引用, 78 // 当common对象能够处理时就处理,不能处理时传递给major对象处理 79 // 同样majar对象的SetSuccessor函数中传递general对象的引用 80 // 当majar对象能够处理时就处理,不能处理时传递给general对象处理 81 common->SetSuccessor(major); 82 major->SetSuccessor(general); 83 Request* rq = new Request(); 84 85 rq->m_nNumber = 999; 86 common->GetRequest(rq); 87 88 rq->m_nNumber = 4999; 89 common->GetRequest(rq); 90 91 rq->m_nNumber = 6999; 92 common->GetRequest(rq); 93 94 delete rq; 95 delete major; 96 delete common; 97 delete general; 98 99 system("pause"); 100 return 0; 101 }
标签:
原文地址:http://www.cnblogs.com/SnailProgramer/p/4275143.html