浅谈Python设计模式 -- 责任链模式

责任链模式:

它允许多个对象都有机会处理请求,将请求沿着一个链传递,直到有一个对象处理请求为止。责任链模式可以避免请求发送者和接收者之间的耦合关系,从而使得多个对象都有机会处理请求。

用于让多个对象处理一个请求时,或者用于预先不知道由哪个对象来处理某种特定请求时,其原则如下:

  1、存在一个对象链(链表、树或者其他便捷的数据结构)。

  2、一开始将请求发送给第一个对象,让其处理。

  3、对象决定是否处理该请求。

  4、对象将请求转发给下一个对象。

  5、重复该过程,直到达到链尾。

代码:

使用责任链模式处理一个数字,将其分别转换成整数、浮点数和字符串三种类型。

# 抽象处理器
class Handler:
    def __init__(self):
        self.next_handler = None
    
    def handle(self, request):
        pass

    def set_next(self, handler):
        self.next_handler = handler
        return handler

# 具体处理器1:处理整数
class IntHandler(Handler):
    def handle(self, request):
        if isinstance(request, int):
            print(f"{request} is an integer.")
        elif self.next_handler:
            self.next_handler.handle(request)

# 具体处理器2:处理浮点数
class FloatHandler(Handler):
    def handle(self, request):
        if isinstance(request, float):
            print(f"{request} is a float.")
        elif self.next_handler:
            self.next_handler.handle(request)

# 具体处理器3:处理字符串
class StrHandler(Handler):
    def handle(self, request):
        if isinstance(request, str):
            print(f"{request} is a string.")
        elif self.next_handler:
            self.next_handler.handle(request)

# 客户端
handler = IntHandler()
handler.set_next(FloatHandler()).set_next(StrHandler())
handler.handle(10)
handler.handle(3.14)
handler.handle('Hello World')

该模式的优缺点:

 优点:
  1、将请求者与处理者分离,请求者并不知道请求是被哪个处理者所处理,易于扩展。

 缺点:

  1、如果责任链比较长,会有比较大的性能问题;
  2、如果责任链比较长,若业务出现问题,比较难定位是哪个处理者的问题。


 应用场景:
  2、若一个请求可能由一个对请求有链式优先级的处理群所处理时,可以考虑责任链模式。除本例外,银行的客户请求处理系统也可以用责任链模式实现(VIP客户和普通用户处理方式当然会有不同)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值