将多個處理方法連接配接成一條鍊條,請求将在這條鍊條上流動直到該鍊條中有一個節點可以處理該請求;通常這條鍊條是一個對象包含對另一個對象的引用而形成鍊條,每個節點有對請求的條件,當不滿足條件将傳遞給下一個節點處理。
示例code:
建立三個不同的對象,每個對象隻處理指定範圍内的數字,不屬于自己的就傳遞給下一個對象。
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集合
責任鍊模式有幾個要點:
- 一個對象中含有另一個對象的引用以此類推形成鍊條
- 每個對象中應該有明确的責任劃分即處理請求的條件
- 鍊條的最後一節應該設計成通用請求處理,以免出現漏洞
- 請求應該傳傳入連結條的頭部