Python設(shè)計(jì)模式行為型責(zé)任鏈模式
一、責(zé)任鏈模式
責(zé)任鏈模式,將多個(gè)處理方法連接成一條鏈條,請(qǐng)求將在這條鏈條上流動(dòng)直到該鏈條中有一個(gè)節(jié)點(diǎn)可以處理該請(qǐng)求。通常這條鏈條是一個(gè)對(duì)象包含對(duì)另一個(gè)對(duì)象的引用而形成鏈條,每個(gè)節(jié)點(diǎn)有對(duì)請(qǐng)求的條件,當(dāng)不滿(mǎn)足條件將傳遞給下一個(gè)節(jié)點(diǎn)處理。
責(zé)任鏈模式有幾個(gè)要點(diǎn):
- 一個(gè)對(duì)象中含有另一個(gè)對(duì)象的引用以此類(lèi)推形成鏈條。
- 每個(gè)對(duì)象中應(yīng)該有明確的責(zé)任劃分,即處理請(qǐng)求的條件。
- 鏈條的最后一節(jié)應(yīng)該設(shè)計(jì)成通用請(qǐng)求處理,以免出現(xiàn)漏洞。
- 請(qǐng)求應(yīng)該傳入鏈條的頭部
二、應(yīng)用場(chǎng)景

三、代碼示例
實(shí)體角色:
- 抽象處理者(Handler)
- 具體處理者(Concrete Handler)
- 客戶(hù)端(Client)
import abc
# 抽象處理者
class Handler(metaclass=abc.ABCMeta):
? ? @abc.abstractmethod
? ? def handle(self, day):
? ? ? ? pass
# 具體處理者,作為鏈條節(jié)點(diǎn)之一。
class GeneralManager(Handler):
? ? def handle(self, day):
? ? ? ? if day <= 10:
? ? ? ? ? ? print(f"總經(jīng)理準(zhǔn)假{day}天")
? ? ? ? else:
? ? ? ? ? ? print("休假太長(zhǎng),不予準(zhǔn)假!")
# 具體處理者,作為鏈條節(jié)點(diǎn)之一。
class DivisionManager(Handler):
? ? def __init__(self):
? ? ? ? self.next = GeneralManager() ?# 鏈接到下一級(jí)
? ? def handle(self, day):
? ? ? ? if day <= 5:
? ? ? ? ? ? print(f"部門(mén)經(jīng)理準(zhǔn)假{day}天")
? ? ? ? else:
? ? ? ? ? ? print("部門(mén)經(jīng)理準(zhǔn)假職級(jí)不足")
? ? ? ? ? ? self.next.handle(day)
# 具體處理者,作為鏈條節(jié)點(diǎn)之一。
class ProjectManager(Handler):
? ? def __init__(self):
? ? ? ? self.next = DivisionManager() ?# 鏈接到下一級(jí)
? ? def handle(self, day):
? ? ? ? if day <= 3:
? ? ? ? ? ? print(f"項(xiàng)目經(jīng)理準(zhǔn)假{day}天")
? ? ? ? else:
? ? ? ? ? ? print("項(xiàng)目經(jīng)理準(zhǔn)假職級(jí)不足")
? ? ? ? ? ? self.next.handle(day)
if __name__ == "__main__":
? ? handler = ProjectManager()
? ? handler.handle(4)到此這篇關(guān)于Python設(shè)計(jì)模式行為型責(zé)任鏈模式的文章就介紹到這了,更多相關(guān)Python責(zé)任鏈模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 找出list中最大或者最小幾個(gè)數(shù)的索引方法
今天小編就為大家分享一篇python 找出list中最大或者最小幾個(gè)數(shù)的索引方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
python開(kāi)發(fā)之函數(shù)定義實(shí)例分析
這篇文章主要介紹了python開(kāi)發(fā)之函數(shù)定義方法,以實(shí)例形式較為詳細(xì)的分析了Python中函數(shù)的定義與使用技巧,需要的朋友可以參考下2015-11-11
分享4個(gè)Python中的非常好用的自動(dòng)化腳本
這篇文章為大家準(zhǔn)備了4個(gè)很棒的Python自動(dòng)化腳本,可以解決這些問(wèn)題。文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2022-11-11
python實(shí)現(xiàn)對(duì)象列表根據(jù)某個(gè)屬性排序的方法詳解
這篇文章主要介紹了python實(shí)現(xiàn)對(duì)象列表根據(jù)某個(gè)屬性排序的方法,結(jié)合具體實(shí)例形式詳細(xì)分析了Python對(duì)象列表遍歷、排序的兩種常見(jiàn)操作技巧,需要的朋友可以參考下2019-06-06
django authentication 登錄注冊(cè)的實(shí)現(xiàn)示例
本文主要介紹了使用Django內(nèi)置的authentication功能實(shí)現(xiàn)用戶(hù)注冊(cè)和登錄功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11
Python安裝配置OpenGL環(huán)境的全過(guò)程記錄
這篇文章主要給大家介紹了關(guān)于Python安裝配置OpenGL環(huán)境的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Python KeyError異常的原因及問(wèn)題解決
KeyError是Python內(nèi)置異常之一,KeyError是當(dāng)試圖獲取字典中不存在的鍵時(shí),引發(fā)的異常,本文就來(lái)介紹一下KeyError異常的原因及問(wèn)題解決,感興趣的可以了解一下2024-12-12

