Python設(shè)計模式結(jié)構(gòu)型組合模式
一、組合模式
組合,將多個對象組合成為一個樹狀結(jié)構(gòu),來表示業(yè)務(wù)邏輯上的層次。組合模式使得用戶對單個對象和組合對象的使用具有一致性。
比如,描述一家公司的層次結(jié)構(gòu),那么我們用辦公室來表示節(jié)點,則總經(jīng)理辦公司是根節(jié)點,下面分別由人事辦公室、業(yè)務(wù)辦公室、生產(chǎn)辦公室、財務(wù)辦公室,每個辦公室下面可以還有跟小的辦公室,每個辦公室都有職責(zé)、人員數(shù)、人員薪資等屬性;
優(yōu)點:
- 定義了包含基本對象和組合對象的類層次結(jié)構(gòu)。
- 簡化
Client代碼,即Client可以一致地使用組合對象和單個對象。 - 更容易增加新類型的組件。
二、應(yīng)用場景
用于設(shè)計一個有層次等級的系統(tǒng),并處理各層次之間的關(guān)系。
三、代碼示例

實體角色:
- 抽象組件(
Component) - 葉子組件(
Leaf) - 復(fù)合組件(
Composite) - 客戶端(
Client)
class ComponentBase:
? ? """部門抽象出來的基類"""
? ? def __init__(self, name):
? ? ? ? slef.name = name
? ? def add(self, obj):
? ? ? ? pass
? ? def remove(self, obj):
? ? ? ? pass
? ? def display(self, number):
? ? ? ? pass
class Node(ComponentBase):
? ? def __init__(self, name, duty):
? ? ? ? self.name = name
? ? ? ? self.duty = duty
? ? ? ? self.children = []
? ? def add(self, obj):
? ? ? ? self.children.append(obj)
? ? def remove(self, obj):
? ? ? ? self.children.remove(obj)
? ? def display(self, number=1):
? ? ? ? print("部門:{} 級別:{} 職責(zé):{}".format(self.name, number, self.duty))
? ? ? ? n = number+1
? ? ? ? for obj in self.children:
? ? ? ? ? ? obj.display(n)
if __name__ == '__main__':
? ? root = Node("總經(jīng)理辦公室", "總負責(zé)人")
? ? node1 = Node("財務(wù)部門", "公司財務(wù)管理")
? ? root.add(node1)
? ? node2 = Node("業(yè)務(wù)部門", "銷售產(chǎn)品")
? ? root.add(node2)
? ? node3 = Node("生產(chǎn)部門", "生產(chǎn)產(chǎn)品")
? ? root.add(node3)
? ? node4 = Node("銷售事業(yè)一部門", "A產(chǎn)品銷售")
? ? node2.add(node4)
? ? node5 = Node("銷售事業(yè)二部門", "B產(chǎn)品銷售")
? ? node2.add(node5)
? ? root.display()
到此這篇關(guān)于Python設(shè)計模式結(jié)構(gòu)型組合模式的文章就介紹到這了,更多相關(guān)Python組合模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
布同 Python中文問題解決方法(總結(jié)了多位前人經(jīng)驗,初學(xué)者必看)
首先談?wù)勎沂窃趺从龅絇ython中文輸入問題的。我寫了一個小工具,用來查詢Python的庫函數(shù)。2011-03-03
python開啟攝像頭以及深度學(xué)習(xí)實現(xiàn)目標檢測方法
今天小編就為大家分享一篇python開啟攝像頭以及深度學(xué)習(xí)實現(xiàn)目標檢測方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
python3實現(xiàn)指定目錄下文件sha256及文件大小統(tǒng)計
這篇文章主要為大家詳細介紹了python3實現(xiàn)指定目錄下文件sha256及文件大小統(tǒng)計,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-02-02
python進程間數(shù)據(jù)交互的幾種實現(xiàn)方式
本文主要介紹了python進程數(shù)據(jù)交互的幾種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
OpenCV學(xué)習(xí)記錄python實現(xiàn)連通域處理函數(shù)
這篇文章主要為大家介紹了OpenCV學(xué)習(xí)記錄python實現(xiàn)連通域處理函數(shù)cv2.connectedComponentsWithStats()和cv2.connectedComponents()的使用示例詳解2022-06-06
python使用tomorrow實現(xiàn)多線程的例子
今天小編就為大家分享一篇python使用tomorrow實現(xiàn)多線程的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07

