(一)、什麼是責任鏈模式
責任鏈(chain of responsibility)模式用於讓多個物件來處理單個請求 時,或者用於預先不知道應該由哪個物件(來自某個物件鏈)來處理某個特定請求時。
(二)、責任鏈原則
(三)、**實現
# -*- coding: utf-8 -*-
class
event
: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)
:def
handle_close
(self, event)
:print
('mainwindow: {}'
.format
(event)
)def
handle_default
(self, event)
:print
('mainwindow default: {}'
.format
(event)
)class
senddialog
(widget)
:def
handle_paint
(self, event)
:print
('senddialog: {}'
.format
(event)
)class
msgtext
(widget)
:def
handle_down
(self, event)
:print
('msgtext: {}'
.format
(event)
)def
main()
: 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(
)
Python設計模式 責任鏈模式
責任鏈模式 chain of responsibility pattern 可將請求的傳送方與處理請求的接收方解耦。這樣的話,某函式就不用直接呼叫別的函式了,而是可以把請求傳送給乙個由諸多接收者所組成的鏈條。鏈條中的首個接收者可以處理請求並停止責任鏈 也就是不再繼續往下傳遞 也可以把請求發給下乙個接...
python設計模式 責任鏈模式
學習版本3.5.2 學習版本3.5.2 在責任鏈模式中,多個不同職能的物件連線起來形成一條鏈,請求在這個鏈上傳遞,直 到鏈結上有乙個物件將請求處理完 發這個請求的客戶端並不知道鏈上的哪乙個物件最終處 理了這個請求,這可以使得系統可以在不影響客戶端的情況下動態的重新組織和分配責任 1到3類請求分別需要...
設計模式 責任鏈模式
定義 避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些請求連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。例項 請假加薪審批 using system using system.collections.generic using system.text namespa...