日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

Python設(shè)計(jì)模式結(jié)構(gòu)型組合模式_python

作者:范桂颶 ? 更新時(shí)間: 2022-04-20 編程語(yǔ)言

一、組合模式

組合,將多個(gè)對(duì)象組合成為一個(gè)樹狀結(jié)構(gòu),來(lái)表示業(yè)務(wù)邏輯上的層次。組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。

比如,描述一家公司的層次結(jié)構(gòu),那么我們用辦公室來(lái)表示節(jié)點(diǎn),則總經(jīng)理辦公司是根節(jié)點(diǎn),下面分別由人事辦公室、業(yè)務(wù)辦公室、生產(chǎn)辦公室、財(cái)務(wù)辦公室,每個(gè)辦公室下面可以還有跟小的辦公室,每個(gè)辦公室都有職責(zé)、人員數(shù)、人員薪資等屬性;

優(yōu)點(diǎn):

  • 定義了包含基本對(duì)象和組合對(duì)象的類層次結(jié)構(gòu)。
  • 簡(jiǎn)化 Client 代碼,即 Client 可以一致地使用組合對(duì)象和單個(gè)對(duì)象。
  • 更容易增加新類型的組件。

二、應(yīng)用場(chǎng)景

用于設(shè)計(jì)一個(gè)有層次等級(jí)的系統(tǒng),并處理各層次之間的關(guān)系。

三、代碼示例

實(shí)體角色:

  • 抽象組件(Component
  • 葉子組件(Leaf
  • 復(fù)合組件(Composite
  • 客戶端(Client
class ComponentBase:
? ? """部門抽象出來(lái)的基類"""
? ? 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("部門:{} 級(jí)別:{} 職責(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)理辦公室", "總負(fù)責(zé)人")
? ? node1 = Node("財(cái)務(wù)部門", "公司財(cái)務(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()

原文鏈接:https://is-cloud.blog.csdn.net/article/details/122933725

欄目分類
最近更新