當我學習了責任鏈模式,準備進行寫作分享的時候,我覺得拿魔塔這個遊戲進行舉例說明可能比較貼近,魔塔裡面每10層有乙個boss,而這個boss的屬性可能從一開始的問號到明確數值。當你被打敗後,會被嘲諷兩句,然後你會去刷裝備、刷等級、刷屬性、氪金變強等等,然後打敗了第乙個boss,會繼續重複這個流程,只是每個boss屬性值變化罷了。這就可以抽象為責任鏈模式:以某個數值或者某個標準作為分類規則,將一系列的物件形成乙個鏈條,處理請求時,一層層向上傳輸,直到某個節點可以處理這個請求。
基礎uml圖:
具體處理者concretehandler:具體的處理類,其中通過一定的標準,來判斷是否在該類處理,不能就通過基類所儲存的下一節點物件進行傳遞處理
使用場景:
優點:
缺點:
實操
責任:每個或者說是整個程式都是為了解決一類的問題。 比如打boss、公升職、加薪、投簡歷等等,都是實際上需要一層層向上找負責人的過程。
鏈:你的請求一層層向上傳輸的時候,每個節點不需要知道整體,只需要知道我的上一層在**就行了,也可能是下層在**。其原理和單鏈表差不多。
思維順序:
指定乙個問題的分類規則和分類。比如我分為10、100、1000,這就是標準,然後用繼承派生寫出整個類組,抽象處理函式和具體的處理函式
新增乙個基類指標。作為乙個節點的上層boss物件
由於已經存在上層了,所以處理函式不可能直接進行處理了,因此需要新增判斷函式,滿足條件就自己處理,不滿足就向上傳遞
// chainofresponsibilitmodel.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。
//#include using namespace std;
#define inte***ce struct
inte***ce iboss
virtual void fightnewboss(int power) = 0;
};class cboss1 : public iboss
else if (null != m_leader)
}};class cboss2 : public iboss
else if(null != m_leader)
}};class cboss3 : public iboss
else
}};int main()
責任鏈模式(職責鏈模式)
責任鏈 chain of responsibility 模式的定義 為了避免請求傳送者與多個請求處理者耦合在一起,於是將所有請求的處理者通過前一物件記住其下乙個物件的引用而連成一條鏈 當有請求發生時,可將請求沿著這條鏈傳遞,直到有物件處理它為止。注意 責任鏈模式也叫職責鏈模式。在責任鏈模式中,客戶只...
責任鏈模式
責任鏈模式 chain of responsibility 的目標是使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。舉個例子。你到銀行去辦理業務,只是簡單的存個錢,也許atm就解決你的問題。如果你是為了交費...
責任鏈模式
有3個request與3個handler,每個request由相應的handler來處理,當乙個handler與request不匹配時則傳遞給下乙個handler來處理 inte ce request class request1 implements request class request2 ...