Python 设计模式 — 行为型模式 — 责任链模式
Posted 范桂飓
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 设计模式 — 行为型模式 — 责任链模式相关的知识,希望对你有一定的参考价值。
目录
文章目录
责任链模式
责任链模式,将多个处理方法连接成一条链条,请求将在这条链条上流动直到该链条中有一个节点可以处理该请求。通常这条链条是一个对象包含对另一个对象的引用而形成链条,每个节点有对请求的条件,当不满足条件将传递给下一个节点处理。
责任链模式有几个要点:
- 一个对象中含有另一个对象的引用以此类推形成链条。
- 每个对象中应该有明确的责任划分,即处理请求的条件。
- 链条的最后一节应该设计成通用请求处理,以免出现漏洞。
- 请求应该传入链条的头部。
应用场景
代码示例
实体角色:
- 抽象处理者(Handler)
- 具体处理者(Concrete Handler)
- 客户端(Client)
import abc
# 抽象处理者
class Handler(metaclass=abc.ABCMeta):
@abc.abstractmethod
def handle(self, day):
pass
# 具体处理者,作为链条节点之一。
class GeneralManager(Handler):
def handle(self, day):
if day <= 10:
print(f"总经理准假day天")
else:
print("休假太长,不予准假!")
# 具体处理者,作为链条节点之一。
class DivisionManager(Handler):
def __init__(self):
self.next = GeneralManager() # 链接到下一级
def handle(self, day):
if day <= 5:
print(f"部门经理准假day天")
else:
print("部门经理准假职级不足")
self.next.handle(day)
# 具体处理者,作为链条节点之一。
class ProjectManager(Handler):
def __init__(self):
self.next = DivisionManager() # 链接到下一级
def handle(self, day):
if day <= 3:
print(f"项目经理准假day天")
else:
print("项目经理准假职级不足")
self.next.handle(day)
if __name__ == "__main__":
handler = ProjectManager()
handler.handle(4)
以上是关于Python 设计模式 — 行为型模式 — 责任链模式的主要内容,如果未能解决你的问题,请参考以下文章