python 設計模式 chain鏈模式

2021-08-17 04:17:49 字數 1962 閱讀 4592

鏈模式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...