• 11.Python_结构型模式_责任链模式


    1.定义

    12
    定义避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止
    角色抽象处理者(Handler)
    具体处理者:(ConcreteHandler)
    客户端:(Client)
    优点1.降低耦合度,它将请求的发送者和接收者解耦.
    2.简化了对象,使得对象不需要知道链的结构.
    3.增强给对象指派职责的灵活性.通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。
    4.增加新的请求处理类很方便
    缺点1,不能保证请求一定被接收。
    2,系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。
    3,可能不容易观察运行时的特征,有碍于除错
    应用场景1,有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。
    2,在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
    3,可动态指定一组对象处理请求

    2.示例

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    from abc import ABCMeta, abstractmethod
    
    
    # 抽象处理者
    class Handler(metaclass=ABCMeta):
        @abstractmethod
        def handle_leave(self, day):
            pass
    
    
    # 具体处理者
    class GeneralManager(Handler):
    
        def handle_leave(self, day):
            if day <= 10:
                print("总经理批准%d天" % day)
            else:
                print("你还是辞职吧")
    
    
    class DepartmentManager(Handler):
        def __init__(self):
            self.next = GeneralManager()
    
        def handle_leave(self, day):
            if day < 7:
                print("部门经理批准%s天" % day)
            else:
                print("部门经理职权不够")
                self.next.handle_leave(day)
    
    
    class ProjectDirector(Handler):
        def __init__(self):
            self.next = DepartmentManager()
    
        def handle_leave(self, day):
            if day <= 3:
                print("项目主管批准%d" % day)
            else:
                print("项目主管职权不够")
                self.next.handle_leave(day)
    
    
    # 客户端
    if __name__ == '__main__':
        a = ProjectDirector()
        a.handle_leave(10)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
  • 相关阅读:
    手写一个PrattParser基本运算解析器1: 编译原理概述
    spring复习(第三天上午)(黑马版)
    CSS - 深入理解选择器的使用方式
    荷兰量子生态联盟投资110万欧元开发超导量子处理器
    63. 不同路径 II
    LVS集群 ----------------(直接路由 )DR模式部署 (二)
    安卓逆向之双剑合璧实现内存扫描
    腾讯云服务器
    pytest(6)-Fixture(固件)
    AI赋能写作:探索设计模式的魅力
  • 原文地址:https://blog.csdn.net/weixin_44689630/article/details/126458695