Python的組合模式與責任鏈模式程式設計示例

2022-10-04 22:09:37 字數 3233 閱讀 7873

組合模式

我們把composite模式看成乙個複雜的屬性結構,其實基本有三種角色:樹幹(定義一些操作樹葉leaf的操作),樹枝(樹幹上有很多樹枝)和樹葉(樹幹想要具體操作的物件) ,composite模式幫我們實現:即它們在充當物件的時候,還是其他物件的容易,從而提供一致性

python的例子

class trunk(object):

'''樹幹'''

def __str__(self):

pass

def subtree(self):

pass

class composite(trunk):

def __init__(self, left=none, right=none, length=none):

self.left=left

self.right=right

self.length=length

def __str__(self):

# 這個結果是在呼叫subtree()的時候返回

if self.length:

return "(" + self.left.__st + ", " + self.right.__str__() + ")" + ": " + str(self.length)

else:

return "(" + self.left.__str__() + ", " + self.right.__str__() + ")"

# 這裡其實就是乙個技巧,通過這個函式返回下一級的物件,也就是它既是物件還可以是物件的容器

def subtree(self):

return composite(self.left, self.right)

class leaf(trunk):

'''葉子類,它沒辦法繼續延伸了'''

def __init__(self, name, length=none):

self.name = name

self.length=length

self.left = none

self.right = none

def __str__(self):

return self.name + ": " + str(self.length)

def subtree(self):

return leaf(self.name, self.length)

if __name__ == "__main__":

# 只有葉子那麼就直接返回__str__的拼裝結果

t1 = leaf('a', 0.71399)

print t1

# 有個2個葉子的組合,返回的是2個葉子的物件的組合

t2 = composite(leaf('b', -0.00804),

leaf('c', 0.07470))

print t2

# 這個是巢狀的葉子的組合,樹幹上面有樹枝,樹枝上面有葉子

t3 = composite(leaf('a', 0.71399),

composite(leaf('b', -0.00804),

www.cppcns.comleaf('c', 0.07470), 0.1533), 0.0666)

print t3

# 直接通過左右節點找到對應的葉子物件了

t4 = t3.right.right.subtree()

print t4

# t3的左樹其實就是葉子物件了

t5 = t3.left.subtree()

print t5

責任鏈模式

比如我們還在讀書的時候,考試的分數都是幾個檔次,比如90-100分,80-90分,好吧我想做乙個根據分數列印你的學習成績的反饋, 比如90-100就是a+,80-90就是a,70-80就是b+… 當然你可以用很多種方法實現,我這裡就來實現乙個chain模式:用一系列的類來響應, 但只有遇到適合處理它的類才會處理,類似與case和switch的作用

python的例子

class basehandler:

# 它起到了鏈的作用

def successor(self, successor):

self.successor = successor

class scorehandler1(basehandler):

def handle(self, request):

ifwww.cppcns.com request > 90 and request <= 100:

return "a+"

else:

# 否則傳給下乙個鏈,下同,但是我是要return回結果的

return self.successor.handle(request)

class scorehandler2(basehandler):

def handle(self, request):

if request > 80 and request <= 90:

return "a"

else:

return self.successor.handle(request)

class scorehandler3(basehandler):

def handle(self, request):

if request > 70 and request <= 80:

return "b+"

else:

return "unsatisfactory result"

class client:

def __init__(self):

h1 = scorehandler1()

h2 = scorehandler2()

h3 = scorehandler3()

# 注意這個順序,h3包含乙個類似於default結果的東西,是要放在最後的,其他的順序是無所謂的,比如h1和h2

h1.successor(h2)

h2.successor(h3)

requests =

for name, score in requests.iteritems():

print '{} is {}'.format(name, h1.handle(score))

if __name__== "__main__":

client = client()

本文標題: python的組合模式與責任鏈模式程式設計示例

本文位址: /jiaoben/python/141603.html

Python的組合模式與責任鏈模式程式設計示例

python的組合模式與責任鏈模式程式設計示例 這篇文章主要介紹了python的組合模式與責任鏈模式程式設計示例,組合模式與責任鏈模式都屬於python的設計模式,需要的朋友可以參考下 組合模式 我們把composite模式看成乙個複雜的屬性結構,其實基本有三種角色 樹幹 定義一些操作樹葉leaf的...

Python設計模式 責任鏈模式

責任鏈模式 chain of responsibility pattern 可將請求的傳送方與處理請求的接收方解耦。這樣的話,某函式就不用直接呼叫別的函式了,而是可以把請求傳送給乙個由諸多接收者所組成的鏈條。鏈條中的首個接收者可以處理請求並停止責任鏈 也就是不再繼續往下傳遞 也可以把請求發給下乙個接...

python設計模式 責任鏈模式

學習版本3.5.2 學習版本3.5.2 在責任鏈模式中,多個不同職能的物件連線起來形成一條鏈,請求在這個鏈上傳遞,直 到鏈結上有乙個物件將請求處理完 發這個請求的客戶端並不知道鏈上的哪乙個物件最終處 理了這個請求,這可以使得系統可以在不影響客戶端的情況下動態的重新組織和分配責任 1到3類請求分別需要...