1. 程式人生 > >行為型模型 責任鏈模式

行為型模型 責任鏈模式

man include 設計模式的 構造 public use 優缺點 適用於 各類

行為型模型 責任鏈模式

技術分享

Handler
處理類的抽象父類。
concreteHandler
具體的處理類。

責任鏈優缺點
優點:
1。責任的分擔。每個類只需要處理自己該處理的工作(不該處理的傳遞給下一個對象完成),明確各類的責任範圍,符合類的最小封裝原則。
2。可以根據需要自由組合工作流程。如工作流程發生變化,可以通過重新分配對象鏈便可適應新的工作流程。
3。類與類之間可以以松耦合的形式加以組織。
缺點:
因為處理時以鏈的形式在對象間傳遞消息,根據實現方式不同,有可能會影響處理的速度。

適用於:
鏈條式處理事情。工作流程化、消息處理流程化、事物流程化;

/**
 * 行為型模型 責任鏈模式
 * Command模式也叫命令模式 ,是行為設計模式的一種。
 * Chain of Responsibility(CoR)模式也叫職責鏈模式或者職責連鎖模式,是行為模式之一,
 * 該模式構造一系列分別擔當不同的職責的類的對象來共同完成一個任務,這些類的對象之間像鏈條一樣緊密相連,所以被稱作職責鏈模式。
 *
 */

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string
> #include <list> class CarHandle { public: CarHandle * setNextHandle(CarHandle * carhandle) { this->carhandle = carhandle; return this->carhandle; } virtual void HandleCar() = 0; virtual ~CarHandle() {} protected: // 註意: 此變量為保護屬性 CarHandle * carhandle; };
class CarHandleHead: public CarHandle { public: virtual void HandleCar() override { std::cout << "處理車頭" << std::endl; if (this->carhandle != nullptr) { this->carhandle->HandleCar(); } } }; class CarHandleBody: public CarHandle { public: virtual void HandleCar() override { std::cout << "處理車身" << std::endl; if (this->carhandle != nullptr) { this->carhandle->HandleCar(); } } }; class CarHandleTail: public CarHandle { public: virtual void HandleCar() override { std::cout << "處理車尾" << std::endl; if (this->carhandle != nullptr) { this->carhandle->HandleCar(); } } }; void mytest() { CarHandleHead * head = new CarHandleHead(); CarHandleBody * body = new CarHandleBody(); CarHandleTail * tail = new CarHandleTail(); head->setNextHandle(body); body->setNextHandle(tail); tail->setNextHandle(nullptr); head->HandleCar(); delete head; head = nullptr; delete body; body = nullptr; delete tail; tail = nullptr; return; } int main() { mytest(); system("pause"); return 0; }

行為型模型 責任鏈模式