Python設計模式之職責鏈模式原理與用法例項分析

2022-10-03 18:09:13 字數 1482 閱讀 2913

職責鏈模式(chain of responsibility):使多個物件都有機會處理請求,從而避免傳送者和接收者的耦合關係。將物件連成鏈並沿著這條鏈傳遞請求直到被處理

下面是乙個設計模式的demo:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

__author__ = 'andy'

"""大話設計模式

設計模式——職責鏈模式

職責鏈模式(chain of responsibility):使多個物件都有機會處理請求,從而避免傳送者和接收者的耦合關係。將物件連成鏈並沿著這條鏈傳遞請求直到被處理

(在呼叫時要定義好哪個例項是哪個例項的職責上一級)請求沿著定義的鏈條傳遞給可以處理請求的物件

"""#抽象乙個處理類

class handle(object):

def __iwww.cppcns.comnit__(self):

self.successor = ''

def setsuccessor(self, successor):

self.successor = successor

def handle_request(self,request):

pass

# 具體處理者類1

class concretehandle1(handle):

def handle_request(self,rlytgzkqequest):

if request>0 and request<=10:

程式設計客棧print "concretehandle1處理請求 ",request

else:

self.successor.handle_request(request)

# 具體處理者類2

class concretehandle2(handle):

def handle_request(self,request):

if request>10 and request<=20:

print "concretehandle2處理請求 ",request

else:

self.successor.handle_request(request)

if __name__=="__main__":

c1 = concretehandle1()

c2 = concretehandle2()

c1.setsuccessor(c2)

for i in range(6,15,2):

c1.handle_request(i)

執行結果:

上面類的設計如下圖:

接收者和傳送者都沒有對方的明確資訊,且鏈中的物件自己並不知道鏈的結構,職責鏈可簡化物件的相互連線,他們僅需保持乙個指向後繼者的引用,而不需要保持他所有候選接收者的引用,大大降低了耦合度,可以隨時增加或修改處理乙個請求的結構

但是要當心,乙個請求沿著職責鏈到達末端,都沒有正確的配置而得不到處理的情況

設計模式之職責鏈模式

如果我們現在有乙個需求,乙個人他生了病,這個病要在 醫院才能看,但是這個病人並不清楚,就先去了一級醫院,一級醫院的醫生告訴他你的病要去二級醫院看,二級醫院也告訴他 你的病我這裡看不了,你要去 醫院才能看,最後他去 醫院把病看好了.這個過程直接寫成 class patient this.patient...

設計模式之職責鏈模式

職責鏈模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。適用場景 1 有多個的物件可以處理乙個請求,哪個物件處理該請求執行時刻自動確定 2 在不明確指定接收者的情況下,向多個物件中的乙個提交乙個請求 ...

設計模式之職責鏈模式

職責鏈模式 chain of responsibility 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將多個物件連成一條鏈,沿著這條鏈傳遞請求直到有物件處理它為止。可以定義乙個抽象類來表示處理事件的物件,這個類首先有個處理事件的抽象方法,然後提供乙個方法設定下一級處理者...