責任鏈模式 行為模式

2021-10-10 14:18:27 字數 1164 閱讀 1606

1、描述

責任鏈是一種行為設計模式,允許你將請求沿著處理者鏈進行傳送,直至其中乙個處理者對其進行處理。

該模式允許多個物件來對請求進行處理,而無需讓傳送者類與具體接受者類相耦合。鏈可在執行時由遵循標準處理者介面的任意處理者動態生成。

優點:責任鏈模式非常顯著的優點是將請求和處理分開。請求者可以不用知道是誰處理的,處理者可以不用知道請求的全貌,兩者解耦,提高系統的靈活性。

缺點:1、效能問題,每個請求都是從鏈頭遍歷到鏈尾,特別是在鏈比較長的時候,效能是乙個非常大的問題。二是除錯不很方便,特別是鏈條比較長,環節比較多的時候,由於採用了類似遞迴的方式,除錯的時候邏輯可能比較複雜。

2、結構圖

#include #include #include //處理者介面宣告了責任鏈上所有處理者的通用方法。它也宣告了乙個處理請求的方法。

class handler ;

//基礎處理者實現了預設的處理

class abstracthandler : public handler

handler *setnext(handler *handler) override

std::string handle(std::string request) override

return {};

}};//所有的具體處理者都可以處理乙個請求或將該請求傳遞給下乙個處理者

class monkeyhandler : public abstracthandler else

}};class squirrelhandler : public abstracthandler else

}};class doghandler : public abstracthandler else

}};//客戶端**經常使用單個處理者,大部分情況下,它甚至並不清楚這是乙個鏈

void clientcode(handler &handler) ;

for (const std::string &f : food) else

}}//另一方面,客戶**構造實際的鏈

int main()

參考

責任鏈模式(行為型)

思考問題 模擬班遊集體請假 學校規定 對於班遊,學生提交的申請表,必須經過輔導員 系主任 院長 校長簽名確認才能出遊,現在由你來設計該業務模型模擬該需求,應該如何設計?解答 很直觀的一種想法 我直接設計乙個學生類 乙個申請單類requestnote 乙個輔導員類 乙個系主任類 乙個院長類 乙個校長類...

責任鏈模式 行為型

使用場景 1 如果有多個物件可以處理同乙個請求,但是具體由哪個物件來處理該請求,是執行時刻動態確定的。這種情況可以使用職責鏈模式,把處理請求的物件實現成為職責物件,然後把它們構成乙個職責鏈,當請求在這個鏈中傳遞的時候,具體由哪個職責物件來處理,會在執行時動態判斷。2 如果你想在不明確指定接收者的情況...

設計模式 行為型模式 責任鏈模式

設計模式 行為型模式 責任鏈模式 將請求沿著鏈傳遞,然後直到物件處理即可。邏輯如上,只處理1,2,3情況,其餘的情況都不處理。物件 public class level public boolean above level level 將物件進行封裝 public class request pub...