23种设计模式之责任链模式
責(zé)任鏈模式的定義
定義: 使多個對象都有機會處理請求, 從而避免了請求的發(fā)送者和接受者之間的耦合關(guān)系. 將這些對象連成一條鏈, 并沿著這條鏈傳遞該請求,直到有對象處理它為止
通俗的講, 就是將對請求的處理組成一條鏈, 當(dāng)請求來時, 在鏈中依次傳遞, 知道找到能夠處理此請求的對象
其通用類圖如下:
?
責(zé)任鏈模式的重點是 在"鏈"上, "鏈"由多個處理者 ConcreteHandler 組成的
Handler 抽象類代碼如下:
?
抽象的處理者實現(xiàn)三個職責(zé):
具體處理類實現(xiàn)抽象類的方法即可
其中涉及到的三個類:
場景類代碼如下:
?
在實際應(yīng)用中, 一般會有一個封裝類對責(zé)任鏈進行封裝, 直接返回鏈中的第一個處理者, 具體鏈的設(shè)置不需要高層模塊關(guān)心, 這樣, 更簡化了高層模塊的調(diào)用, 減少模塊間的耦合, 提高系統(tǒng)的靈活性
責(zé)任鏈模式的應(yīng)用
1.責(zé)任鏈模式的優(yōu)點
責(zé)任鏈模式非常顯著的優(yōu)點就是將請求和處理分開.請求者可以不用知道是誰處理的, 處理者可以不用知道請求的全貌, 兩者解耦, 提高系統(tǒng)的靈活性
2.責(zé)任鏈模式的缺點
3.責(zé)任鏈模式的注意事項
鏈中節(jié)點數(shù)量需要控制,避免出現(xiàn)超長鏈的情況, 一般的做法是在Handler中設(shè)置一個最大節(jié)點數(shù)量, 在setNext方法中判斷是否已經(jīng)超出其閾值, 超過則不允許該鏈建立, 避免無意識的破壞系統(tǒng)性能
在上面的例子中, 融合了模板方法模式, 通過融合模板方法模式, 各個實現(xiàn)類只要關(guān)注自己的業(yè)務(wù)邏輯就成了, 至于什么事要自己處理, 就讓父類去決定好了, 也就是說父類實現(xiàn)了請求傳遞的功能, 子類實現(xiàn)請求的處理, 符合單一職責(zé)原則, 這樣, 子類的實現(xiàn)非常簡單, 責(zé)任鏈的建立也非常靈活.
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的23种设计模式之责任链模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用git管理crontab任务
- 下一篇: 23种设计模式之门面模式