天天看點

python設計模式(十五):責任鍊模式

将多個處理方法連接配接成一條鍊條,請求将在這條鍊條上流動直到該鍊條中有一個節點可以處理該請求;通常這條鍊條是一個對象包含對另一個對象的引用而形成鍊條,每個節點有對請求的條件,當不滿足條件将傳遞給下一個節點處理。

示例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集合
           

責任鍊模式有幾個要點:

  • 一個對象中含有另一個對象的引用以此類推形成鍊條
  • 每個對象中應該有明确的責任劃分即處理請求的條件
  • 鍊條的最後一節應該設計成通用請求處理,以免出現漏洞
  • 請求應該傳傳入連結條的頭部