日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

23种设计模式C++源码与UML实现--责任链模式

發(fā)布時(shí)間:2025/3/15 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 23种设计模式C++源码与UML实现--责任链模式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

責(zé)任鏈模式

Chain of Responsibility CoR模式,也叫責(zé)任鏈模式或者責(zé)任連鎖模式,是行為模式之一,該模式構(gòu)造一系列分別擔(dān)當(dāng)不同的職責(zé)的類的對(duì)象來(lái)共同完成一個(gè)任務(wù),這些類的對(duì)象之間像一條鏈條一樣緊密相連,所以被稱為責(zé)任鏈模式。

例1:比如客戶Client客戶想完成一個(gè)任務(wù),這個(gè)任務(wù)包括a,b,c,d四個(gè)部分。a完成了之后交個(gè)b,b完成了之后交給c,c完成了之后交給d。

角色和職責(zé)

Handler

處理類的抽象父類

concreteHandle

具體處理類

責(zé)任鏈優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 責(zé)任的分組。每個(gè)類只需要處理自己該處理的工作(不該處理的傳遞給下一個(gè)對(duì)象完成),明確各類的責(zé)任范圍,符合類的最小封裝原則。
  • 可以根據(jù)需要自由組合工作流程。如工作流程發(fā)生變化,可以通過(guò)重新分配對(duì)象鏈便可適應(yīng)新的工作流程。
  • 類與類之間可以以松耦合的形式加以組織。
  • 缺點(diǎn)

    因?yàn)樘幚頃r(shí)以鏈表的形式在對(duì)象間傳遞消息,根據(jù)實(shí)現(xiàn)方式不同,有可能會(huì)影響處理的速度

    適用于:

    鏈條式處理事情,工作流程化、消息處理流程化、事物流程化。

    // // Created by andrew on 2020/11/25. // #include <iostream>using namespace std; /** 責(zé)任鏈模式* */// 在造車的過(guò)程,一部分造完之后,需要將任務(wù)傳遞下去 class CarHandle { public:virtual void HandleCar() = 0;virtual ~CarHandle() = default;CarHandle *setNextHandle(CarHandle *handle) {m_handle = handle;return m_handle;}protected:CarHandle *m_handle{}; // 指向下一個(gè)處理單元 };class HeadCarHandle : public CarHandle { public:void HandleCar() override {cout << "make head" << endl; // 開(kāi)始造車頭,車頭造好之后,交給下一個(gè)調(diào)用者if (m_handle != nullptr) {m_handle->HandleCar();}} };class BodyCarHandle : public CarHandle { public:void HandleCar() override {cout << "make body" << endl; // 車身造好之后,把任務(wù)遞交給 下一個(gè)處理者if (m_handle != nullptr) {m_handle->HandleCar();}} };class TailCarHandle : public CarHandle { public:void HandleCar() override {cout << "make tail" << endl; // 造車尾 把任務(wù)遞交給 下一個(gè)處理器if (m_handle != nullptr) {m_handle->HandleCar();}} };int main(int argc, char *argv[]) {CarHandle *headHandle = new HeadCarHandle;CarHandle *bodyHandle = new BodyCarHandle;CarHandle *tailHeadle = new TailCarHandle;headHandle->setNextHandle(tailHeadle);tailHeadle->setNextHandle(bodyHandle);bodyHandle->setNextHandle(nullptr);headHandle->HandleCar();delete tailHeadle;delete bodyHandle;delete headHandle;return 0; }

    總結(jié)

    以上是生活随笔為你收集整理的23种设计模式C++源码与UML实现--责任链模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。