日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Python設(shè)計模式行為型責(zé)任鏈模式_python

作者:范桂颶 ? 更新時間: 2022-04-20 編程語言

一、責(zé)任鏈模式

責(zé)任鏈模式,將多個處理方法連接成一條鏈條,請求將在這條鏈條上流動直到該鏈條中有一個節(jié)點可以處理該請求。通常這條鏈條是一個對象包含對另一個對象的引用而形成鏈條,每個節(jié)點有對請求的條件,當(dāng)不滿足條件將傳遞給下一個節(jié)點處理。

責(zé)任鏈模式有幾個要點:

  • 一個對象中含有另一個對象的引用以此類推形成鏈條。
  • 每個對象中應(yīng)該有明確的責(zé)任劃分,即處理請求的條件。
  • 鏈條的最后一節(jié)應(yīng)該設(shè)計成通用請求處理,以免出現(xiàn)漏洞。
  • 請求應(yīng)該傳入鏈條的頭部

二、應(yīng)用場景

三、代碼示例

實體角色:

  • 抽象處理者(Handler)
  • 具體處理者(Concrete Handler)
  • 客戶端(Client)
import abc


# 抽象處理者
class Handler(metaclass=abc.ABCMeta):
? ? @abc.abstractmethod
? ? def handle(self, day):
? ? ? ? pass


# 具體處理者,作為鏈條節(jié)點之一。
class GeneralManager(Handler):
? ? def handle(self, day):
? ? ? ? if day <= 10:
? ? ? ? ? ? print(f"總經(jīng)理準(zhǔn)假{day}天")
? ? ? ? else:
? ? ? ? ? ? print("休假太長,不予準(zhǔn)假!")


# 具體處理者,作為鏈條節(jié)點之一。
class DivisionManager(Handler):
? ? def __init__(self):
? ? ? ? self.next = GeneralManager() ?# 鏈接到下一級

? ? def handle(self, day):
? ? ? ? if day <= 5:
? ? ? ? ? ? print(f"部門經(jīng)理準(zhǔn)假{day}天")
? ? ? ? else:
? ? ? ? ? ? print("部門經(jīng)理準(zhǔn)假職級不足")
? ? ? ? ? ? self.next.handle(day)


# 具體處理者,作為鏈條節(jié)點之一。
class ProjectManager(Handler):
? ? def __init__(self):
? ? ? ? self.next = DivisionManager() ?# 鏈接到下一級

? ? def handle(self, day):
? ? ? ? if day <= 3:
? ? ? ? ? ? print(f"項目經(jīng)理準(zhǔn)假{day}天")
? ? ? ? else:
? ? ? ? ? ? print("項目經(jīng)理準(zhǔn)假職級不足")
? ? ? ? ? ? self.next.handle(day)


if __name__ == "__main__":
? ? handler = ProjectManager()
? ? handler.handle(4)

原文鏈接:https://is-cloud.blog.csdn.net/article/details/122933665

欄目分類
最近更新