將多個處理方法連接成一條鏈條老充,請求將在這條鏈條上流動直到該鏈條中有一個節(jié)點可以處理該請求葡盗;通常這條鏈條是一個對象包含對另一個對象的引用而形成鏈條,每個節(jié)點有對請求的條件啡浊,當(dāng)不滿足條件將傳遞給下一個節(jié)點處理觅够。
示例code:
創(chuàng)建三個不同的對象,每個對象只處理指定范圍內(nèi)的數(shù)字虫啥,不屬于自己的就傳遞給下一個對象蔚约。
class Bases:
def __init__(self, obj=None):
self.obj = obj
def screen(self, number):
pass
class A(Bases):
def screen(self, number):
if 200 > number > 100:
print("{} 劃入A集合".format(number))
else:
self.obj.screen(number)
class B(Bases):
def screen(self, number):
if number >= 200:
print("{} 劃入B集合".format(number))
else:
self.obj.screen(number)
class C(Bases):
def screen(self, number):
if 100 >= number:
print("{} 劃入C集合".format(number))
if __name__ == '__main__':
test = [10, 100, 150, 200, 300]
c = C()
b = B(c)
a = A(b)
for i in test:
a.screen(i)
-------------------
10 劃入C集合
100 劃入C集合
150 劃入A集合
200 劃入B集合
300 劃入B集合
責(zé)任鏈模式有幾個要點:
一個對象中含有另一個對象的引用以此類推形成鏈條
每個對象中應(yīng)該有明確的責(zé)任劃分即處理請求的條件
鏈條的最后一節(jié)應(yīng)該設(shè)計成通用請求處理,以免出現(xiàn)漏洞
請求應(yīng)該傳入鏈條的頭部
image