第8篇---Python设计模式之责任链模式+含代码实现+学习python的赶快进
责任链模式概念:
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一个链,并沿着这条链传递该请求,直到有一个对象处理它为止。 简述:就是面向过程中的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处理不了,他自己就会往下传 直到有人能处理。
输出结果: