Python责任链模式
范桂飓 人气:1一、责任链模式
责任链模式,将多个处理方法连接成一条链条,请求将在这条链条上流动直到该链条中有一个节点可以处理该请求。通常这条链条是一个对象包含对另一个对象的引用而形成链条,每个节点有对请求的条件,当不满足条件将传递给下一个节点处理。
责任链模式有几个要点:
- 一个对象中含有另一个对象的引用以此类推形成链条。
- 每个对象中应该有明确的责任划分,即处理请求的条件。
- 链条的最后一节应该设计成通用请求处理,以免出现漏洞。
- 请求应该传入链条的头部
二、应用场景
三、代码示例
实体角色:
- 抽象处理者(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)
加载全部内容