中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

上饒網(wǎng)站開發(fā)有哪些網(wǎng)絡(luò)推廣平臺

上饒網(wǎng)站開發(fā),有哪些網(wǎng)絡(luò)推廣平臺,建筑人才網(wǎng)怎么樣,wordpress 點(diǎn)擊復(fù)制責(zé)任鏈模式的動機(jī)與意圖 動機(jī): 在軟件開發(fā)中,經(jīng)常會遇到需要處理一系列請求或事件的情況。這些請求可能需要經(jīng)過多個處理對象,每個對象根據(jù)其職責(zé)決定是否處理請求或?qū)⑵鋫鬟f給下一個對象。責(zé)任鏈模式(Chain of Responsibility P…

責(zé)任鏈模式的動機(jī)與意圖

動機(jī):
在軟件開發(fā)中,經(jīng)常會遇到需要處理一系列請求或事件的情況。這些請求可能需要經(jīng)過多個處理對象,每個對象根據(jù)其職責(zé)決定是否處理請求或?qū)⑵鋫鬟f給下一個對象。責(zé)任鏈模式(Chain of Responsibility Pattern)提供了一種將請求的發(fā)送者和接收者解耦的方式,允許多個對象都有機(jī)會處理請求,從而避免了請求發(fā)送者與接收者之間的緊密耦合。

意圖:
責(zé)任鏈模式的意圖是使多個對象都有機(jī)會處理請求,從而避免請求的發(fā)送者與接收者之間的耦合。將這些對象連成一條鏈,并沿著這條鏈傳遞請求,直到有對象處理它為止。

適用場合

  1. 多個對象可以處理同一請求,但具體由哪個對象處理在運(yùn)行時確定。
  2. 需要在不明確指定接收者的情況下,向多個對象中的一個提交請求。
  3. 需要動態(tài)指定一組對象處理請求,例如在運(yùn)行時動態(tài)調(diào)整處理鏈。

責(zé)任鏈模式的變體

  1. 純責(zé)任鏈模式:

    • 每個處理者要么處理請求,要么將請求傳遞給下一個處理者,但不能同時進(jìn)行。
    • 這種模式通常用于嚴(yán)格的鏈?zhǔn)教幚?#xff0c;例如審批流程。
  2. 不純責(zé)任鏈模式:

    • 處理者可以部分處理請求,然后將請求傳遞給下一個處理者。
    • 這種模式允許處理者在處理請求的同時,繼續(xù)傳遞請求,適用于需要多個處理者共同完成任務(wù)的場景。
  3. 帶中斷的責(zé)任鏈模式:

    • 處理者可以在處理請求后決定是否中斷鏈的傳遞。
    • 這種模式適用于某些情況下,一旦請求被處理,就不需要繼續(xù)傳遞的場景。
  4. 帶優(yōu)先級的責(zé)任鏈模式:

    • 處理者根據(jù)優(yōu)先級決定是否處理請求,優(yōu)先級高的處理者先處理請求。
    • 這種模式適用于需要根據(jù)優(yōu)先級決定處理順序的場景。

以下是基于責(zé)任鏈模式的不同變體的 C++ 代碼示例。每個示例都展示了如何在 C++ 中實現(xiàn)責(zé)任鏈模式的不同形式。


1.?純責(zé)任鏈模式

在純責(zé)任鏈模式中,每個處理者要么處理請求,要么將請求傳遞給下一個處理者。處理者不會同時處理請求并傳遞請求。

#include <iostream>
#include <memory>class Handler {
public:virtual ~Handler() = default;virtual void setNext(std::shared_ptr<Handler>) = 0;virtual void handle(const std::string& request) = 0;
};class BaseHandler : public Handler {
protected:std::shared_ptr<Handler> nextHandler;public:void setNext(std::shared_ptr<Handler> handler) override {nextHandler = handler;}void handle(const std::string& request) override {if (nextHandler) {nextHandler->handle(request);}}
};class ConcreteHandlerA : public BaseHandler {
public:void handle(const std::string& request) override {if (request == "A") {std::cout << "ConcreteHandlerA handles request: " << request << std::endl;} else {BaseHandler::handle(request);}}
};class ConcreteHandlerB : public BaseHandler {
public:void handle(const std::string& request) override {if (request == "B") {std::cout << "ConcreteHandlerB handles request: " << request << std::endl;} else {BaseHandler::handle(request);}}
};int main() {auto handlerA = std::make_shared<ConcreteHandlerA>();auto handlerB = std::make_shared<ConcreteHandlerB>();handlerA->setNext(handlerB);handlerA->handle("B");  // ConcreteHandlerB handles request: BhandlerA->handle("A");  // ConcreteHandlerA handles request: AhandlerA->handle("C");  // No handler can process Creturn 0;
}


2.?不純責(zé)任鏈模式

在不純責(zé)任鏈模式中,處理者可以部分處理請求,然后將請求傳遞給下一個處理者。

#include <iostream>
#include <memory>class Handler {
public:virtual ~Handler() = default;virtual void setNext(std::shared_ptr<Handler>) = 0;virtual void handle(const std::string& request) = 0;
};class BaseHandler : public Handler {
protected:std::shared_ptr<Handler> nextHandler;public:void setNext(std::shared_ptr<Handler> handler) override {nextHandler = handler;}void handle(const std::string& request) override {if (nextHandler) {nextHandler->handle(request);}}
};class ConcreteHandlerA : public BaseHandler {
public:void handle(const std::string& request) override {if (request == "A") {std::cout << "ConcreteHandlerA handles request: " << request << std::endl;} else {std::cout << "ConcreteHandlerA partially processes request: " << request << std::endl;BaseHandler::handle(request);}}
};class ConcreteHandlerB : public BaseHandler {
public:void handle(const std::string& request) override {if (request == "B") {std::cout << "ConcreteHandlerB handles request: " << request << std::endl;} else {std::cout << "ConcreteHandlerB partially processes request: " << request << std::endl;BaseHandler::handle(request);}}
};int main() {auto handlerA = std::make_shared<ConcreteHandlerA>();auto handlerB = std::make_shared<ConcreteHandlerB>();handlerA->setNext(handlerB);handlerA->handle("B");  // ConcreteHandlerB handles request: BhandlerA->handle("A");  // ConcreteHandlerA handles request: AhandlerA->handle("C");  // ConcreteHandlerA partially processes request: C// ConcreteHandlerB partially processes request: Creturn 0;
}


3.?帶中斷的責(zé)任鏈模式

在帶中斷的責(zé)任鏈模式中,處理者可以在處理請求后決定是否中斷鏈的傳遞。

#include <iostream>
#include <memory>class Handler {
public:virtual ~Handler() = default;virtual void setNext(std::shared_ptr<Handler>) = 0;virtual bool handle(const std::string& request) = 0;
};class BaseHandler : public Handler {
protected:std::shared_ptr<Handler> nextHandler;public:void setNext(std::shared_ptr<Handler> handler) override {nextHandler = handler;}bool handle(const std::string& request) override {if (nextHandler) {return nextHandler->handle(request);}return false;}
};class ConcreteHandlerA : public BaseHandler {
public:bool handle(const std::string& request) override {if (request == "A") {std::cout << "ConcreteHandlerA handles request: " << request << std::endl;return true;  // 中斷鏈?zhǔn)絺鬟f}return BaseHandler::handle(request);}
};class ConcreteHandlerB : public BaseHandler {
public:bool handle(const std::string& request) override {if (request == "B") {std::cout << "ConcreteHandlerB handles request: " << request << std::endl;return true;  // 中斷鏈?zhǔn)絺鬟f}return BaseHandler::handle(request);}
};int main() {auto handlerA = std::make_shared<ConcreteHandlerA>();auto handlerB = std::make_shared<ConcreteHandlerB>();handlerA->setNext(handlerB);handlerA->handle("B");  // ConcreteHandlerB handles request: BhandlerA->handle("A");  // ConcreteHandlerA handles request: AhandlerA->handle("C");  // No handler can process Creturn 0;
}


4.?帶優(yōu)先級的責(zé)任鏈模式

在帶優(yōu)先級的責(zé)任鏈模式中,處理者根據(jù)優(yōu)先級決定是否處理請求,優(yōu)先級高的處理者先處理請求。

#include <iostream>
#include <memory>
#include <vector>
#include <algorithm>class Handler {
public:virtual ~Handler() = default;virtual int getPriority() const = 0;virtual void handle(const std::string& request) = 0;
};class BaseHandler : public Handler {
protected:int priority;public:BaseHandler(int p) : priority(p) {}int getPriority() const override {return priority;}void handle(const std::string& request) override {// 默認(rèn)不處理}
};class ConcreteHandlerA : public BaseHandler {
public:ConcreteHandlerA(int p) : BaseHandler(p) {}void handle(const std::string& request) override {if (request == "A") {std::cout << "ConcreteHandlerA handles request: " << request << std::endl;}}
};class ConcreteHandlerB : public BaseHandler {
public:ConcreteHandlerB(int p) : BaseHandler(p) {}void handle(const std::string& request) override {if (request == "B") {std::cout << "ConcreteHandlerB handles request: " << request << std::endl;}}
};int main() {auto handlerA = std::make_shared<ConcreteHandlerA>(2);auto handlerB = std::make_shared<ConcreteHandlerB>(1);std::vector<std::shared_ptr<Handler>> handlers = {handlerA, handlerB};// 根據(jù)優(yōu)先級排序std::sort(handlers.begin(), handlers.end(), [](const auto& h1, const auto& h2) {return h1->getPriority() > h2->getPriority();});for (const auto& handler : handlers) {handler->handle("B");  // ConcreteHandlerB handles request: Bhandler->handle("A");  // ConcreteHandlerA handles request: A}return 0;
}


總結(jié)

以上代碼示例展示了責(zé)任鏈模式的四種不同變體:

  1. 純責(zé)任鏈模式:處理者要么處理請求,要么傳遞請求。
  2. 不純責(zé)任鏈模式:處理者可以部分處理請求并傳遞請求。
  3. 帶中斷的責(zé)任鏈模式:處理者可以中斷鏈的傳遞。
  4. 帶優(yōu)先級的責(zé)任鏈模式:處理者根據(jù)優(yōu)先級決定處理順序。

這些變體可以根據(jù)具體需求靈活選擇和實現(xiàn),以滿足不同場景下的功能需求。

基于責(zé)任鏈模式特點(diǎn)的軟件架構(gòu)模式

  1. 中間件架構(gòu):

    • 在Web開發(fā)中,中間件架構(gòu)通常使用責(zé)任鏈模式來處理HTTP請求。每個中間件都可以對請求進(jìn)行處理,然后決定是否將請求傳遞給下一個中間件。
    • 例如,Express.js中的中間件機(jī)制就是基于責(zé)任鏈模式實現(xiàn)的。
  2. 事件處理系統(tǒng):

    • 在GUI編程中,事件處理系統(tǒng)通常使用責(zé)任鏈模式來處理用戶事件。每個事件處理器可以處理事件,或者將事件傳遞給下一個處理器。
    • 例如,Java AWT/Swing中的事件處理機(jī)制就是基于責(zé)任鏈模式實現(xiàn)的。
  3. 工作流引擎:

    • 在工作流引擎中,責(zé)任鏈模式可以用于處理工作流中的各個步驟。每個步驟可以處理任務(wù),或者將任務(wù)傳遞給下一個步驟。
    • 例如,Activiti等工作流引擎中的任務(wù)處理機(jī)制就是基于責(zé)任鏈模式實現(xiàn)的。
  4. 過濾器鏈:

    • 在Web應(yīng)用中,過濾器鏈通常使用責(zé)任鏈模式來處理請求和響應(yīng)。每個過濾器可以對請求或響應(yīng)進(jìn)行處理,然后將其傳遞給下一個過濾器。
    • 例如,Java Servlet中的過濾器機(jī)制就是基于責(zé)任鏈模式實現(xiàn)的。

總結(jié)

責(zé)任鏈模式通過將請求的發(fā)送者和接收者解耦,提供了一種靈活的方式來處理請求。它適用于多個對象可以處理同一請求的場景,并且可以通過不同的變體來滿足不同的需求?;谪?zé)任鏈模式的特點(diǎn),許多軟件架構(gòu)模式(如中間件架構(gòu)、事件處理系統(tǒng)、工作流引擎和過濾器鏈)都采用了這種模式來實現(xiàn)靈活的處理機(jī)制。

http://www.risenshineclean.com/news/22681.html

相關(guān)文章:

  • 專門做活動的網(wǎng)站怎么注冊一個自己的網(wǎng)站
  • 視頻網(wǎng)站哪個做的好網(wǎng)絡(luò)營銷意思
  • 企業(yè)網(wǎng)站建設(shè)網(wǎng)頁推廣軟文300字
  • 網(wǎng)站怎么做評估北京seo優(yōu)化排名
  • 網(wǎng)站建設(shè)員官網(wǎng)設(shè)計比較好看的網(wǎng)站
  • 怎樣辦網(wǎng)站seo關(guān)鍵字排名
  • 攝影師個人網(wǎng)站制作自動點(diǎn)擊器免費(fèi)下載
  • 新建設(shè)電影院 網(wǎng)站開網(wǎng)站需要什么流程
  • php畢業(yè)設(shè)計二手網(wǎng)站怎么做寧波網(wǎng)站建設(shè)推廣平臺
  • 中國菲律賓南海開戰(zhàn)seo對網(wǎng)絡(luò)推廣的作用是
  • 韶關(guān)網(wǎng)站開發(fā)seo網(wǎng)站搭建是什么
  • 新疆網(wǎng)站黨建設(shè)備百度小說風(fēng)云榜排行榜官網(wǎng)
  • 個人做電子商務(wù)網(wǎng)站seo研究中心南寧線下
  • 專業(yè)注冊公司代辦海東地區(qū)谷歌seo網(wǎng)絡(luò)優(yōu)化
  • ftp做網(wǎng)站網(wǎng)絡(luò)公司網(wǎng)站建設(shè)
  • 網(wǎng)站建設(shè)相關(guān)文獻(xiàn)佛山seo優(yōu)化
  • 公司網(wǎng)站制作的公司站長域名查詢
  • 服務(wù)器與網(wǎng)站全網(wǎng)seo是什么意思
  • 網(wǎng)站里的聊天怎么做營銷技巧培訓(xùn)ppt
  • 做網(wǎng)站開發(fā)湖人最新消息
  • 網(wǎng)站建設(shè)與管理難學(xué)嗎如何做網(wǎng)站營銷
  • 可以在線做護(hù)理題的網(wǎng)站免費(fèi)推廣平臺
  • 達(dá)州網(wǎng)站建設(shè)公司推廣關(guān)鍵詞排名方法
  • 三角形景觀綠化設(shè)計圖北京seo經(jīng)理
  • java 做網(wǎng)站鄭州競價代運(yùn)營公司
  • 汕頭免費(fèi)建站哪里有win7怎么優(yōu)化最流暢
  • 聯(lián)盟網(wǎng)站做任務(wù)合肥網(wǎng)站排名提升
  • 制作游戲編輯器app線下課程seo
  • 做美圖+網(wǎng)站有哪些seo網(wǎng)站優(yōu)化優(yōu)化排名
  • 訪問不到自己做的網(wǎng)站外國網(wǎng)站怎么進(jìn)入