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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++设计模式-职责链模式

發布時間:2025/3/15 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++设计模式-职责链模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

?

基本概念

代碼與實例

在哪種地方使用


?

基本概念

職責鏈模式(Chain of Responsibility):時多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這個對象連接成一條鏈,并沿著這條鏈條傳遞該請求,直到有一個對象處理它為止。

這里發出這個請求的客戶端并不知道這當中的哪個對象最終處理這個請求,這樣系統的更改可以在不影響客戶端的情況下動態的重新組織和分配責任。

結構圖如下(此圖來源于大話設計模式)

職責鏈的好處:當客戶提交一個請求時,請求是沿著鏈傳遞直至有一個ConcreteHandler對象負責處理它。隨時的增加或修改處理一個請求的結構。增強了對象指派職責的靈活性。一個請求極可能導論鏈的末端都得不到處理,或者因為沒有正確配置而得不到處理。

?

代碼與實例

程序運行截圖如下:

Head.h

#ifndef HEAD_H #define HEAD_H#include <iostream> #include <string> using namespace std;//Handler類,定義一個處理請示的接口 class Handler{public:void setSuccessor(Handler *successor);virtual void handleRequest(int request);virtual ~Handler();protected:Handler();Handler(Handler &handler);Handler &operator = (Handler &h);Handler *m_successor; };/* ConcreteHandler類,具體處理者類,處理它所負責的請求,可訪問它的后繼者,如果可處理該請求就處理之, 否則就將該請求轉發給它的后繼者。 *///ConcreteHandler1,當請求數在0到10之間則有權利處理,否則轉到下一位。 class ConcreteHandler1 : public Handler{public:void handleRequest(int request);~ConcreteHandler1(); };//ConcreteHandler2,當請求數在10到20之間則有權處理,否則轉移到下一位 class ConcreteHandler2: public Handler{public:void handleRequest(int request);~ConcreteHandler2(); };//COncreteHandle3,當請求數在20到30之間則有權處理,否則轉移到下一位 class ConcreteHandler3: public Handler{public:void handleRequest(int request);~ConcreteHandler3(); };#endif // !HEAD_H

Head.cpp

#include "Head.h" #include <assert.h>void Handler::setSuccessor(Handler *successor) {m_successor = successor; }void Handler::handleRequest(int request) {}Handler::~Handler() {cout << "Handle::~Handle()" << endl; }Handler::Handler() {m_successor = nullptr; }Handler::Handler(Handler &handler) {m_successor = nullptr; }Handler & Handler::operator=(Handler &h) {m_successor = nullptr;return Handler(); }void ConcreteHandler1::handleRequest(int request) {if(request >= 0 && request < 10){cout << "ConcreteHandler1 處理這個消息" << endl;}else if(m_successor != nullptr){m_successor->handleRequest(request);}else{assert(!"雅喵蝶");} }ConcreteHandler1::~ConcreteHandler1() {cout << "ConcreteHandler1::~ConcreteHandler1()" << endl; }void ConcreteHandler2::handleRequest(int request) {if(request >= 10 && request < 20){cout << "ConcreteHandler2 處理這個消息" << endl;}else if(m_successor != nullptr){m_successor->handleRequest(request);}else{assert(!"雅喵蝶");} }ConcreteHandler2::~ConcreteHandler2() {cout << "ConcreteHandler2::~ConcreteHandler2()" << endl; }void ConcreteHandler3::handleRequest(int request) {if(request >= 20 && request < 30){cout << "ConcreteHandler3 處理這個消息" << endl;}else if(m_successor != nullptr){m_successor->handleRequest(request);}else{assert(!"雅喵蝶");} }ConcreteHandler3::~ConcreteHandler3() {cout << "ConcreteHandler3::~ConcreteHandler3()" << endl; }

main.cpp

#include "Head.h"int main(int *argc, int *argv[]){Handler *h1 = new ConcreteHandler1;Handler *h2 = new ConcreteHandler2;Handler *h3 = new ConcreteHandler3;h1->setSuccessor(h2);h2->setSuccessor(h3);int requests[] = {5, 9, 12, 14, 16, 21, 27, 2};//int requests[] = {5, 9, 12, 14, 16, 21, 27, 2, 31};for(int i = 0; i < sizeof(requests) / sizeof(requests[0]); i++){h1->handleRequest(requests[i]);}delete h1;delete h2;delete h3;getchar();return 0; }

?

在哪種地方使用

轉眼間工作18個月了(加實習),在這18個月的時間,真的是學到了很多東西。下面是本人18個月的工作經驗,對這種設計模式應該可以在哪種地方使用!!

本人認為,可以在2種地方使用!

一種是udp服務器,和某服務器內部采用,舉個栗子!!!

第一種udp服務器:

當接收到數據包后,馬上解析,這里使用職責鏈模式,解析后給對應的handlder,然后對應的handler發送消息給對應的消息隊列(這里舉個例子,使用消息總線,比如RabbitMQ),然后各個處理進程監聽自己的隊列,這樣就可以很好的實現大數據處理和解耦合了!!!!

第二種是某服務器內部:

比如某個會員,他可以花錢提升為V1,V2,V3,V4。當用戶沖錢提升后,先看他有沒有上級,如果有上級,并且提示的等級在他上級之下,就把消息發送給某上級進程(這里同樣可以采用RabbitMQ),當發現等級提示到他上級以上后,就發送給他上級的上級的隊列,最后等級直接發送給管理員,然后給指定的隊列。然后這樣處理,耦合性也處理了!!!

?

總結

以上是生活随笔為你收集整理的C++设计模式-职责链模式的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 大肉大捧一进一出好爽视频 | 女生喷水视频 | 亚洲福利在线播放 | 亚洲国产网站 | 日韩视频在线观看二区 | 穿越异世荒淫h啪肉np文 | 毛片视频网址 | 人妻精品久久久久中文 | 亚洲欧美中文日韩在线 | 伊人国产视频 | 欧美日韩在线视频一区 | 中文字幕久久网 | 国产又粗又大又硬 | 日本免费无人高清 | 产乳奶汁h文1v1 | 97国产精品久久 | 久久久久久黄色 | 午夜视频1000 | 韩国主播青草55部完整 | 日日夜夜精品免费视频 | 四虎精品欧美一区二区免费 | 成人精品一区二区三区电影 | 久久黄色网 | 欧洲美女与动交zozzo | 成人网在线免费观看 | 日韩成人激情 | 超碰在线观看免费 | 黄色国产视频网站 | 精品三级在线观看 | 天堂av2019| 日韩在线一卡二卡 | 久久888 | 国产精品伦一区二区三级视频 | 日韩久久久久久久 | 欧美成人手机在线 | 草草网址 | 欧美 亚洲 另类 激情 另类 | 日本69式三人交 | 强行糟蹋人妻hd中文 | 久久久久久网 | 国产一级自拍 | 曰韩精品 | 毛片网在线观看 | 中文字幕偷拍 | 香蕉久久夜色精品国产使用方法 | bt天堂av | 粉嫩av在线 | 欧美一级黄色片在线观看 | 亚洲综合一 | 亚洲免费观看高清完整版在线 | 天天操综合网 | 国产精品91av| 亚洲国产精品一区 | 一区二区精品久久 | 美女的奶胸大爽爽大片 | 男女曰逼视频 | 在线精品视频一区 | 91网站在线免费看 | 性生活毛片| 日韩欧美一二三区 | 美女脱裤子打屁股 | 99久久久久久久 | 手机av不卡 | 天天拍天天操 | 亚洲熟女综合色一区二区三区 | 在线观看毛片网站 | 欧美福利网 | 国产毛片久久久久 | 黄色av影院| 伊人55 | 男生舔女生的屁股 | 秋霞影院午夜 | 日韩一区二区三区四区五区六区 | 热久久精品免费视频 | 久久深夜| 激情久 | 免费久久一级欧美特大黄 | 亚洲精品成人无码熟妇在线 | 中文字幕在线免费播放 | 精品人妻一区二区三区久久嗨 | 国产一级片精品 | 99re6在线精品视频免费播放 | 人人干人人搞 | 日韩三级一区二区 | 一级片自拍 | 精品国产一区一区二区三亚瑟 | 日本成人三级电影 | 国产网红主播精品av | 二区欧美 | 国产激情久久久久久熟女老人av | 亚洲色图校园春色 | av噜噜在线观看 | 3o一40一50一6o女人毛片 | 韩国伦理片观看 | 性生活三级视频 | caopor超碰 | 天天色影综合网 | 免费毛片小视频 | 亚洲福利精品 |