顧名思義,責任鏈模式(chain of responsibility pattern)為請求建立了乙個接收者物件的鏈。這種模式給予請求的型別,對請求的傳送者和接收者進行解耦。這種型別的設計模式屬於行為型模式。
在這種模式中,通常每個接收者都包含對另乙個接收者的引用。如果乙個物件不能處理該請求,那麼它會把相同的請求傳給下乙個接收者,依此類推。
classevent:
def__init__
(self, name):
self.name =name
def__str__
(self):
return
self.name
class
widget:
def__init__(self, parent=none):
self.parent =parent
defhandle(self, event):
handler = '
handle_{}
'.format(event)
ifhasattr(self, handler):
method =getattr(self, handler)
method(event)
elif
self.parent:
self.parent.handle(event)
elif hasattr(self, '
handle_default'):
self.handle_default(event)
class
mainwindow(widget):
defhandle_close(self, event):
print('
mainwindow: {}
'.format(event))
defhandle_default(self, event):
print('
mainwindow default: {}
'.format(event))
class
senddialog(widget):
defhandle_paint(self, event):
print('
senddialog: {}
'.format(event))
class
msgtext(widget):
defhandle_down(self, event):
print('
msgtext: {}
'.format(event))
defmain():
mw =mainwindow()
sd =senddialog(mw)
msg =msgtext(sd)
for e in ('
down
', '
paint
', '
unhandled
', '
close'):
evt =event(e)
print('
\nsending event -{}- to mainwindow
'.format(evt))
mw.handle(evt)
print('
sending event -{}- to senddialog
'.format(evt))
sd.handle(evt)
print('
sending event -{}- to msgtext
'.format(evt))
msg.handle(evt)
if__name__ == '
__main__':
main()
設計模式 行為型模式 責任鏈模式
設計模式 行為型模式 責任鏈模式 將請求沿著鏈傳遞,然後直到物件處理即可。邏輯如上,只處理1,2,3情況,其餘的情況都不處理。物件 public class level public boolean above level level 將物件進行封裝 public class request pub...
行為型模式(一) 責任鏈模式
責任鏈 chain of responsibility 模式 為了避免請求傳送者與多個請求處理者耦合在一起,將所有請求的處理者通過前一物件記住其下乙個物件的引用而連成一條鏈 當有請求發生時,可將請求沿著這條鏈傳遞,直到有物件處理它為止。注意 責任鏈模式也叫職責鏈模式。在責任鏈模式中,客戶只需要將請求...
行為型模式之責任鏈模式
目錄應用場景 擴充套件 純 不純的職責鏈模式 在現實生活中,常常會出現這樣的事例 乙個請求有多個物件可以處理,但每個物件的處理條件或許可權不同,如找領導出差報銷等。在計算機軟硬體中也有相關例子,如匯流排網中資料報傳送 異常處理。所有這些,如果用責任鏈模式都能很好解決。責任鏈 chain of res...