鏈模式chain,可以將乙個處理流程串成乙個鏈,每一環包括三部分:
1、初始化中,需要指向傳入的類,
2、有判斷呼叫傳入類的method
3、有自己這一環需要做的處理 @abstractmethon
還有乙個約束,應該是終止環(class),這一環僅有第三項,需要做的處理,表明沒有找到合適的環。
**示例:
class handler(object):__metaclass__ = abc.abcmeta
def
__init__(self
, successor=none):
self._successor = successor
def
handle(self
, request):
res = self._handle(request)
if not res:
self._successor.handle(request)
@abc.abstractmethod
def
_handle(self
, request):
raise notimplementederror('must provide implementation in subclass.')
class concretehandler1(handler):
def
_handle(self
, request):
if 0 < request <= 10:
print('request {} handled in handler 1'.format(request))
return
true
class concretehandler2(handler):
def
_handle(self
, request):
if 10 < request <= 20:
print('request {} handled in handler 2'.format(request))
return
true
class concretehandler3(handler):
def
_handle(self
, request):
if 20 < request <= 30:
print('request {} handled in handler 3'.format(request))
return
true
class defaulthandler(handler):
def
_handle(self
, request):
print('end of chain, no handler for {}'.format(request))
return
true
class client(object):
def
__init__(self):
self.handler = concretehandler1(
concretehandler3(concretehandler2(defaulthandler())))
def
delegate(self
, requests):
for request in requests:
self.handler.handle(request)
if __name__ == "__main__":client1 = client()
requests = [2, 5
, 14
, 22
, 18, 3
, 35
, 27
, 20]
client1.delegate(requests)
責任chain模式
class basehandler 它起到了鏈的作用 def successor self,successor self.successor successor class scorehandler1 basehandler def handle self,request if request 90...
責任鏈模式(chain) 員工請假
定義 責任鏈模式是物件的行為模式,在責任鏈模式裡,很多物件由每乙個物件對其下家的引用而鏈結起來形成一條鏈,請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。發出這個請求的客戶端並不知道哪乙個物件處理此請求,這使得系統在不影響客戶端的情況下動態的重新組織和分配責任。角色列表 抽象處理者角色 ha...
Python設計模式 狀態設計模式
狀態設計模式的簡單示例 優缺點乙個物件可以基於其內部狀態封裝多個行為。狀態模式可以看作在執行時改變物件行為的一種方式。以收音機為例進行說明。收音機具有am fm 切換開關 兩種調頻方式和乙個掃瞄按鈕。因此根據收音機的基本狀態 am fm 當調諧到am或fm頻道時,掃瞄按鈕的行為就會動態的改變。con...