淺析Python 責(zé)任鏈設(shè)計(jì)模式
定義:
使多個(gè)對象都有機(jī)會(huì)處理請求,從而避免請求的發(fā)送者和接受者之間的耦合關(guān)系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求直到有一個(gè)對象處理它為止
使用場景:
有多個(gè)對象可以處理一個(gè)請求,哪個(gè)對象處理由時(shí)間運(yùn)行時(shí)決定。在不明確接受者的情況下,向多個(gè)對象中的一個(gè)提交一個(gè)請求
優(yōu)點(diǎn):
降低耦合度:一個(gè)對象無需知道是其他哪一個(gè)對象處理其請求
代碼例子:
'''責(zé)任鏈模式'''from abc import abstractmethod, ABCMetaclass Handler(metaclass=ABCMeta): @abstractmethod def handler_leave(self, day): pass# 總經(jīng)理審批class GenaralHandler(Handler): def handler_leave(self, day): if day <= 10: print(’總經(jīng)理批準(zhǔn)你%s天假,好好去玩吧’ % day) else: print(’你干脆辭職了吧’)# 部門經(jīng)理審批class DepartmentHandler(Handler): def __init__(self): self.upHandler = GenaralHandler() def handler_leave(self, day): if day <= 7: print(’部門經(jīng)理批準(zhǔn)你%s天假,好好去玩吧’ % day) else: print(’你請假超過七天,我無權(quán)受理,你去找總經(jīng)理吧’) self.upHandler.handler_leave(day)# 項(xiàng)目主管審批class ProjectHandler(Handler): def __init__(self): self.upHandler = DepartmentHandler() def handler_leave(self, day): if day <= 3: print(’項(xiàng)目主管批準(zhǔn)你%s天假,好好去玩吧’ % day) else: print(’你請假超過三天,我無權(quán)受理,你去找部門經(jīng)理審批吧’) self.upHandler.handler_leave(day)if __name__ == ’__main__’: h = ProjectHandler(); h.handler_leave(5)
輸出結(jié)果:
你請假超過三天,我無權(quán)受理,你去找部門經(jīng)理審批吧
部門經(jīng)理批準(zhǔn)你5天假,好好去玩吧
以上就是淺析Python 責(zé)任鏈設(shè)計(jì)模式的詳細(xì)內(nèi)容,更多關(guān)于Python 責(zé)任鏈設(shè)計(jì)模式的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. Python的文本常量與字符串模板之string庫2. SpringBoot+TestNG單元測試的實(shí)現(xiàn)3. 利用CSS制作3D動(dòng)畫4. .Net加密神器Eazfuscator.NET?2023.2?最新版使用教程5. jsp+servlet簡單實(shí)現(xiàn)上傳文件功能(保存目錄改進(jìn))6. Springboot 全局日期格式化處理的實(shí)現(xiàn)7. Java GZip 基于內(nèi)存實(shí)現(xiàn)壓縮和解壓的方法8. 完美解決vue 中多個(gè)echarts圖表自適應(yīng)的問題9. 存儲(chǔ)于xml中需要的HTML轉(zhuǎn)義代碼10. JAMon(Java Application Monitor)備忘記
