責任鏈的重點在 " 鏈 " 上,有一條鏈去處理相似的請求,在鏈中決定由於誰去處理這個請求,並返回相應的結果
使多個物件都有機會處理請求,直到有對應的分支進行處理。
使用場景:在乙個購物**,在五一做了乙個活動,所以圖書類商品根據購買的金額依次做出以下折扣方案,
1、購買滿199元,打9折
2、購買滿399元,打8折
3、購買滿599元以上,打7折;
簡單的責任鏈模式:(寫了乙個if的列子)
(1) if else if..
function discount(price) else if (199 <= price && price < 399) else if (399 <= price && price < 599) else if (599 <= price)
}discount(99);
discount(299);
discount(399);
discount(599)
(2) switch case.....
使用責任鏈模式:(我把方法當作處理者
,呼叫方法為請求者)
處理者:
function discount() else
}this.setsucess = function (_sucess)
}function discount9handles() else
}this.setsucess = function (_sucess)
}function discount8handles() else
}this.setsucess = function (_sucess)
}function discount7handles() else
}this.setsucess = function (_sucess)
}
請求者:
var biscount9handles = new discount9handles();
var biscount8handles = new discount8handles();
var biscount7handles = new discount7handles();
biscount.setsucess(biscount9handles);
biscount9handles.setsucess(biscount8handles);
biscount8handles.setsucess(biscount7handles);
biscount.pricehandles(99);
biscount.pricehandles(299);
biscount.pricehandles(399);
biscount.pricehandles(599);
這樣我只需要去修改請求者的組合,而不需要去修改處理者的方法。
責任鏈模式的優點:
實現了請求者跟處理者分離:可以在不影響處理者情況下動態地重新組織和分配責任,提高系統的靈活性和可擴充套件性,因為責任鏈把條件判斷都分散到了各個處理者方法裡,並且這些處理者方法順序可以隨意設定。
責任鏈模式缺點:
正如 if 和switch的缺點一樣,從鏈頭開始,如果未找到正確的處理者,所有的處理者都要跑一次,當責任鏈比較長的時候,效能問題比較嚴重。
需要理解前後邏輯的條件判斷關係,不要再鏈中出現迴圈引用的問題。
總結:責任鏈是乙個靈活的 if 和 switch 語句
設計模式 責任鏈模式
定義 避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些請求連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。例項 請假加薪審批 using system using system.collections.generic using system.text namespa...
設計模式 責任鏈模式
責任鏈可以使得系統在不影響客戶端的前提下動態的安排責任鏈和分配責任。責任鏈模式中包含的角色有抽象處理者,具體處理者以及請求的傳送者。責任鏈可以是一條直線,乙個環鏈甚至乙個樹結構。它使得每乙個具體的訊息處理者都有可能處理訊息。抽象的請求處理者 author wly public abstract cl...
設計模式 責任鏈模式
責任鏈模式 chain ofresponsibility pattern 基本概念 責任鏈,顧名思義,是指乙個負責相應請求的行為鏈。首先要理解的是乙個鏈,然後通過這個鏈來管理個行為。什麼時候會用到責任鏈 對於乙個請求,沒有特別指明由誰處理或沒有指明如何處理。此時可以使用責任鏈的形式,用過將各種處理行...