责任链模式概念:

      使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一个链,并沿着这条链传递该请求,直到有一个对象处理它为止。  简述:就是面向过程中的if...elif...elif...elif ..else。进来一个数,进行if判断,如果满足哪个if条件,则执行,然后退出。。


案例一:

          我们这里设置三个领导,他们分别处理不同的请求量。 当请求量在0到10时,领导一处理。 当请求量在10到50时,领导二处理。当请求量在50以上的时候,领导三处理。。并且在每个领导者类中定义了一个方法set_successor()来设置继承者。。 也就是说,无论你的请求量是多少,只需要传给领导一,如果他处理不了,他会之间传给领导二,领导二能处理则处理,处理不了,又转交给领导三。。。这个就是责任链的真谛。。 最后我们给了一组请求进行测试。。

# 大话数据结构上的一个例子
from abc import abstractmethod, ABCMeta


class Hander(metaclass=ABCMeta):

    # 把方法设置为抽象,就是让子类必须去实现
    @abstractmethod
    def set_successor(self, successor):      # 每个领导要设置其继承者
        pass

    @abstractmethod
    def handle(self, request):   # 每个领导需要处理的任务
        pass

# 我们设置三个具体的领导者

# 一号领导
class ConcreteHander1(Hander):
    successor = None
    def set_successor(self, successor):
        self.successor = successor
    def handle(self, request):
        if request >= 0 and request < 10:    # 请求大于0,但是小于10的时候,ConcreteHandle1处理,负责交给其继承者处理
            print("我是一号领导,这个我可以处理")
        else:
            self.successor.handle(request)

# 二号领导
class ConcreteHandle2(Hander):
    successor = None
    def set_successor(self, successor):
        self.successor = successor

    def handle(self, request):
        if request >= 10 and request <50:
            print("我是二号领导,这个我可以处理")
        else:
            self.successor.handle(request)

# 三号领导
class ConcreteHandle3(Hander):
    successor = None
    def set_successor(self, successor):
        self.successor = successor

    def handle(self, request):
        if request >= 50:   # 其实这个if可以不要了,这里就相当于if else 语句中的else 无需再判断了。只剩我了。
            print("我是三号领导,这个我可以处理")

if __name__ == '__main__':
    h1 = ConcreteHander1()
    h2 = ConcreteHandle2()
    h3 = ConcreteHandle3()
    h1.set_successor(h2)
    h2.set_successor(h3)  # h3不用设置继承这里。。

    request = [2, 24, 53, 86, 12, 6, 32, 75]   # 设置了几组请求数量

    for i in request:
        print("当前请求数量:", i)
        h1.handle(i)   # 不管你是多少请求 直接给h1就行了。 h1处理不了,他自己就会往下传 直到有人能处理。

  输出结果: