生活随笔
收集整理的這篇文章主要介紹了
设计模式C++实现(14)——职责链模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ?職責鏈模式:使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。其思想很簡單,考慮員工要求加薪。公司的管理者一共有三級,總經理、總監、經理,如果一個員工要求加薪,應該向主管的經理申請,如果加薪的數量在經理的職權內,那么經理可以直接批準,否則將申請上交給總監。總監的處理方式也一樣,總經理可以處理所有請求。這就是典型的職責鏈模式,請求的處理形成了一條鏈,直到有一個對象處理請求。給出這個例子的UML圖。
? ? ? ? 代碼的實現比較簡單,如下所示:
[cpp]?view plaincopy print?
?? class?Manager?? {?? protected:?? ????Manager?*m_manager;?? ????string?m_name;?? public:?? ????Manager(Manager?*manager,?string?name):m_manager(manager),?m_name(name){}?? ????virtual?void?DealWithRequest(string?name,?int?num)??{}?? };?? ?? class?CommonManager:?public?Manager?? {?? public:?? ????CommonManager(Manager?*manager,?string?name):Manager(manager,name)?{}?? ????void?DealWithRequest(string?name,?int?num)??? ????{?? ????????if(num?<?500)??? ????????{?? ????????????cout<<"經理"<<m_name<<"批準"<<name<<"加薪"<<num<<"元"<<endl<<endl;?? ????????}?? ????????else?? ????????{?? ????????????cout<<"經理"<<m_name<<"無法處理,交由總監處理"<<endl;?? ????????????m_manager->DealWithRequest(name,?num);?? ????????}?? ????}?? };?? ?? class?Majordomo:?public?Manager?? {?? public:?? ????Majordomo(Manager?*manager,?string?name):Manager(manager,name)?{}?? ????void?DealWithRequest(string?name,?int?num)??? ????{?? ????????if(num?<?1000)??? ????????{?? ????????????cout<<"總監"<<m_name<<"批準"<<name<<"加薪"<<num<<"元"<<endl<<endl;?? ????????}?? ????????else?? ????????{?? ????????????cout<<"總監"<<m_name<<"無法處理,交由總經理處理"<<endl;?? ????????????m_manager->DealWithRequest(name,?num);?? ????????}?? ????}?? };?? ?? class?GeneralManager:?public?Manager?? {?? public:?? ????GeneralManager(Manager?*manager,?string?name):Manager(manager,name)?{}?? ????void?DealWithRequest(string?name,?int?num)???? ????{?? ????????cout<<"總經理"<<m_name<<"批準"<<name<<"加薪"<<num<<"元"<<endl<<endl;?? ????}?? };??
? ? ? ? ?客戶調用方式為:
[cpp]?view plaincopy print?
?? int?main()?? {????? ????Manager?*general?=?new?GeneralManager(NULL,?"A");??? ????Manager?*majordomo?=?new?Majordomo(general,?"B");??? ????Manager?*common?=?new?CommonManager(majordomo,?"C");??? ????common->DealWithRequest("D",300);????? ????common->DealWithRequest("E",?600);?? ????common->DealWithRequest("F",?1000);?? ????delete?common;?delete?majordomo;?delete?general;?? ????return?0;?? }??
?
總結
以上是生活随笔為你收集整理的设计模式C++实现(14)——职责链模式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。