23种设计模式C++源码与UML实现--责任链模式
生活随笔
收集整理的這篇文章主要介紹了
23种设计模式C++源码与UML实现--责任链模式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
責(zé)任鏈模式
Chain of Responsibility CoR模式,也叫責(zé)任鏈模式或者責(zé)任連鎖模式,是行為模式之一,該模式構(gòu)造一系列分別擔(dān)當(dāng)不同的職責(zé)的類的對象來共同完成一個任務(wù),這些類的對象之間像一條鏈條一樣緊密相連,所以被稱為責(zé)任鏈模式。
例1:比如客戶Client客戶想完成一個任務(wù),這個任務(wù)包括a,b,c,d四個部分。a完成了之后交個b,b完成了之后交給c,c完成了之后交給d。
角色和職責(zé)
Handler
處理類的抽象父類
concreteHandle
具體處理類
責(zé)任鏈優(yōu)缺點
優(yōu)點
缺點
因為處理時以鏈表的形式在對象間傳遞消息,根據(jù)實現(xiàn)方式不同,有可能會影響處理的速度
適用于:
鏈條式處理事情,工作流程化、消息處理流程化、事物流程化。
// // Created by andrew on 2020/11/25. // #include <iostream>using namespace std; /** 責(zé)任鏈模式* */// 在造車的過程,一部分造完之后,需要將任務(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{}; // 指向下一個處理單元 };class HeadCarHandle : public CarHandle { public:void HandleCar() override {cout << "make head" << endl; // 開始造車頭,車頭造好之后,交給下一個調(diào)用者if (m_handle != nullptr) {m_handle->HandleCar();}} };class BodyCarHandle : public CarHandle { public:void HandleCar() override {cout << "make body" << endl; // 車身造好之后,把任務(wù)遞交給 下一個處理者if (m_handle != nullptr) {m_handle->HandleCar();}} };class TailCarHandle : public CarHandle { public:void HandleCar() override {cout << "make tail" << endl; // 造車尾 把任務(wù)遞交給 下一個處理器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实现--责任链模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【项目管理】敏捷和计划驱动项目的特征对比
- 下一篇: 作者:周涛,博士,北京启明星辰信息安全技