日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【设计模式】加薪非要老总批 --- 职责链模式

發布時間:2024/4/15 asp.net 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【设计模式】加薪非要老总批 --- 职责链模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一,概述

??????? 定義:使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這個對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為之。

??????? 優點:客戶提出請求時,請求時沿鏈傳遞直至有一個ConcreteHandler對象負責處理它

?

?

二,職責鏈基本代碼

#include <iostream> using namespace std; class Handler {protected:static Handler *successor;public:void SetSuccessor(Handler *successor){this->successor = successor;}virtual void HandleRequest(int request){} }; Handler* Handler::successor=NULL; //必須是static 變量才能在全局初始化 class ConcreteHandler1 :public Handler{public: void HandleRequest(int request){if (request >= 0 && request < 10){cout<<"ConcreteHandler1"<<"處理請求"<<request<<endl;}else if (successor != NULL){successor->HandleRequest(request);}}}; class ConcreteHandler2 :public Handler{public:void HandleRequest(int request){if (request >= 10 && request < 20){cout<<"ConcreteHandler2"<<"處理請求"<<request<<endl;}else if (successor != NULL){successor->HandleRequest(request);}}}; class ConcreteHandler3 :public Handler{public:void HandleRequest(int request){if (request >= 20 && request < 30){cout<<"ConcreteHandler3"<<"處理請求"<<request<<endl;}else if (successor != NULL){successor->HandleRequest(request);}}}; int main() {Handler *h1 = new ConcreteHandler1();Handler *h2 = new ConcreteHandler2();Handler *h3 = new ConcreteHandler3();h1->SetSuccessor(h2);//設置下一個 h2->SetSuccessor(h3);//設置下一個 int request[] = { 2, 5, 14, 22, 18, 3, 27, 20 };for(int i=0;i<8;++i){h1->HandleRequest(request[i]);}return 0; }


三,示例

? ? ? ? 小菜要求加薪,而加薪的批準需要總經理來批準。經理交給總監,總監交給總經理。

? ? ? ? ?缺點:Manager 類 太長,分支太多。如果要增加項目經理、部門經理等職位的話,需要更改原類,比較麻煩。

#include <iostream> using namespace std;//enum ManagerLevel{ "經理","總監","總經理"} ManagerLevel; enum ManagerLevel{ manager,chief_inspector,president} ; //申請class Request{//申請類別private:string requestType;public:string getRequestType(){return requestType; }void setRequestType(string value) { requestType = value; }//申請內容private:string requestContent;public:string getRequestContent(){return requestContent; }void setRequestContent(string value) { requestContent = value; }//數量private:int number;public:int getNumber(){return number;}void setNumber(int value){this->number = value; }}; //管理者class Manager{protected:string name;public:Manager(string name){this->name = name;}//得到結果void GetResult(ManagerLevel managerLevel, Request request){if (managerLevel == manager){if (request.getRequestType() == "請假" && request.getNumber() <= 2){//Console.WriteLine("{0}:{1} 數量{2} 被批準", name, request.RequestContent, request.Number);cout<<name<< request.getRequestContent()<<"數量"<< request.getNumber()<<"被批準"<<endl; }else{cout<<name<< request.getRequestContent()<<"數量"<< request.getNumber()<<"我無權處理"<<endl; //Console.WriteLine("{0}:{1} 數量{2} 我無權處理", name, request.RequestContent, request.Number);}}else if (managerLevel ==chief_inspector){if (request.getRequestType() == "請假" && request.getNumber() <= 5){cout<<name<< request.getRequestContent()<<"數量"<< request.getNumber()<<"被批準"<<endl; //Console.WriteLine("{0}:{1} 數量{2} 被批準", name, request.RequestContent, request.Number);}else{cout<<name<< request.getRequestContent()<<"數量"<< request.getNumber()<<"我無權處理"<<endl; //Console.WriteLine("{0}:{1} 數量{2} 我無權處理", name, request.RequestContent, request.Number);}}else if (managerLevel == president){if (request.getRequestType() == "請假"){cout<<name<< request.getRequestContent()<<"數量"<< request.getNumber()<<"被批準"<<endl; //Console.WriteLine("{0}:{1} 數量{2} 被批準", name, request.RequestContent, request.Number);}else if (request.getRequestType() == "加薪" && request.getNumber() <= 500){cout<<name<< request.getRequestContent()<<"數量"<< request.getNumber()<<"被批準"<<endl; // Console.WriteLine("{0}:{1} 數量{2} 被批準", name, request.RequestContent, request.Number);}else if (request.getRequestType() == "加薪" && request.getNumber() > 500){cout<<name<< request.getRequestContent()<<"數量"<< request.getNumber()<<"被批準"<<endl; // Console.WriteLine("{0}:{1} 數量{2} 再說吧", name, request.RequestContent, request.Number);}}}}; int main(){Manager *jinli = new Manager("金利");Manager *zongjian = new Manager("宗劍");Manager *zhongjingli = new Manager("鐘精勵");Request *request = new Request();request->setRequestType("加薪");request->setRequestContent("小菜請求加薪");request->setNumber(1000);jinli->GetResult(manager, *request);zongjian->GetResult(chief_inspector, *request);zhongjingli->GetResult(president, *request);Request *request2 = new Request();request2->setRequestType("請假");request2->setRequestContent("小菜請假");request2->setNumber(3);jinli->GetResult(manager, *request2);zongjian->GetResult(chief_inspector, *request2);zhongjingli->GetResult(president, *request2);return 0; }

? ? ?2)改進后的代碼

? ? ? ? ? ?說明:C++中不可以直接聲明類的對象,但是可以直接聲明類的指針。

#include <iostream> using namespace std;//enum ManagerLevel{ "經理","總監","總經理"} ManagerLevel; enum ManagerLevel{ manager,chief_inspector,president} ; //申請class Request{//申請類別private:string requestType;public:string getRequestType(){return requestType; }void setRequestType(string value) { requestType = value; }//申請內容private:string requestContent;public:string getRequestContent(){return requestContent; }void setRequestContent(string value) { requestContent = value; }//數量private:int number;public:int getNumber(){return number;}void setNumber(int value){this->number = value; }}; //管理者class Manager{protected:string name;//管理者的上級Manager *superior;public:Manager(string name){this->name = name;}//設置管理者的上級void SetSuperior(Manager *superior){this->superior = superior;}//申請請求virtual void RequestApplications(Request request){} }; //經理class CommonManager :public Manager{public:CommonManager(string name): Manager(name){ }void RequestApplications(Request request){if (request.getRequestType() == "請假" && request.getNumber() <= 2){cout<<name<< request.getRequestContent()<<"數量"<< request.getNumber()<<"被批準"<<endl; }else{if (superior != NULL)superior->RequestApplications(request);}}}; //總監class Majordomo :public Manager{public: Majordomo(string name): Manager(name){ }void RequestApplications(Request request){if (request.getRequestType() == "請假" && request.getNumber() <= 5){cout<<name<< request.getRequestContent()<<"數量"<< request.getNumber()<<"被批準"<<endl; }else{if (superior != NULL)superior->RequestApplications(request);}}}; //總經理class GeneralManager :public Manager{public:GeneralManager(string name): Manager(name){ }void RequestApplications(Request request){if (request.getRequestType() == "請假"){cout<<name<< request.getRequestContent()<<"數量"<< request.getNumber()<<"被批準"<<endl; }else if (request.getRequestType() == "加薪" && request.getNumber() <= 500){cout<<name<< request.getRequestContent()<<"數量"<< request.getNumber()<<"被批準"<<endl; }else if (request.getRequestType() == "加薪" && request.getNumber() > 500){cout<<name<< request.getRequestContent()<<"數量"<< request.getNumber()<<"再說吧"<<endl; }}}; int main(){CommonManager *jinli = new CommonManager("金利");Majordomo *zongjian = new Majordomo("宗劍");GeneralManager *zhongjingli = new GeneralManager("鐘精勵");jinli->SetSuperior(zongjian);zongjian->SetSuperior(zhongjingli);Request *request = new Request();request->setRequestType("請假");request->setRequestContent("小菜請假");request->setNumber(1);jinli->RequestApplications(*request);Request *request2 = new Request();request2->setRequestType("請假");request2->setRequestContent("小菜請假");request2->setNumber(4);jinli->RequestApplications(*request2);Request *request3 = new Request();request3->setRequestType("加薪");request3->setRequestContent("小菜請求加薪");request3->setNumber(500);jinli->RequestApplications(*request3);Request *request4 = new Request();request4->setRequestType("加薪");request4->setRequestContent("小菜請求加薪");request4->setNumber(1000);jinli->RequestApplications(*request4);return 0; }

?

轉載于:https://www.cnblogs.com/secbook/archive/2012/07/18/2654972.html

總結

以上是生活随笔為你收集整理的【设计模式】加薪非要老总批 --- 职责链模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲啪av永久无码精品放毛片 | 黄色激情视频网站 | 狂野少女电影在线观看国语版免费 | 亚洲精品成a人 | 黄色.com | 在线免费观看av网站 | 伊人免费在线观看 | 爱情岛论坛成人 | 久草网在线视频 | 亚洲国产精品成人av | 午夜免费观看 | 你懂的网站在线 | 国产精品com | 在线观看亚洲大片短视频 | 男人天堂手机在线 | 久久久久国产精品国产 | 成年视频在线观看 | 欧美jizz18性欧美 | 日韩一级影片 | 男生和女生靠逼视频 | av一级黄色片 | 老版水浒传83版免费播放 | 日本免费一区二区视频 | 欧美偷拍一区二区三区 | 国产精品九九九 | 日本黄页网站 | 亚洲精品视频一区二区 | 欧美日韩一区二区视频在线观看 | 日韩福利在线视频 | 欧美色图自拍 | 日韩精品免费电影 | 91欧美一区二区 | 亚洲18在线看污www麻豆 | 久久99国产精品成人 | 人乳喂奶hd无中字 | 日韩tv | 精品视频免费 | 超碰在线免费 | 欧美精品少妇 | 久久国产露脸精品国产 | 国产精品111| 亚洲成人xxx | 精品国产乱码久久久久久久 | 五月精品 | 中文字幕第7页 | 色噜噜综合 | av色图| 国产婷婷色 | 国产成人aa | 男人天堂视频网站 | 国产一级做a爰片久久毛片男 | 亚洲性av| 大地资源中文第三页 | 国产中出视频 | jzz国产 | 香蕉视频免费看 | 在线无码va中文字幕无码 | 国产一区二区三区小说 | 9人人澡人人爽人人精品 | 91麻豆一区二区 | 免费成人在线看 | 欧美黄色a视频 | 欧美处女 | 精品1卡二卡三卡四卡老狼 日韩三级网 | 中国女人裸体乱淫 | 国产又粗又猛又爽又黄的视频在线观看动漫 | 吊侵犯の奶水授乳羞羞漫画 | 26uuu国产| 91综合色| 碰碰97 | 黄网站视频在线观看 | 麻豆影音 | 少妇裸体淫交视频免费看高清 | 国产免费一区二区三区视频 | 亚洲午夜一区二区 | 奶罩不戴乳罩邻居hd播放 | 美日毛片 | 日韩少妇视频 | 日欧视频 | 韩日av在线| 久久精彩免费视频 | 国产在线视频你懂的 | 国产精品自产拍在线观看 | 免费毛片大全 | 婷婷av在线 | 国产又粗又猛又爽又黄又 | 人操人操 | 2019国产精品 | 乱lun合集小可的奶水 | 激情三区 | 一级免费看 | 国产精品麻豆一区二区三区 | 国产色婷婷一区二区三区竹菊影视 | 91看篇 | 大胸美女无遮挡 | 精品+无码+在线观看 | 成人三区 | 少妇做爰免费视频播放 | 国产在线观看无码免费视频 |