Python設(shè)計(jì)模式之組合模式原理與用法實(shí)例分析
本文實(shí)例講述了Python設(shè)計(jì)模式之組合模式原理與用法。分享給大家供大家參考,具體如下:
組合模式(Composite Pattern):將對(duì)象組合成成樹(shù)形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性.
下面是一個(gè)組合模式的demo:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大話設(shè)計(jì)模式
設(shè)計(jì)模式——組合模式
組合模式(Composite Pattern):將對(duì)象組合成成樹(shù)形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性.
"""
# 抽象一個(gè)組織類
class Component(object):
def __init__(self, name):
self.name = name
def add(self,comp):
pass
def remove(self,comp):
pass
def display(self, depth):
pass
# 葉子節(jié)點(diǎn)
class Leaf(Component):
def add(self,comp):
print '不能添加下級(jí)節(jié)點(diǎn)'
def remove(self,comp):
print '不能刪除下級(jí)節(jié)點(diǎn)'
def display(self, depth):
strtemp = ''
for i in range(depth):
strtemp += strtemp+'-'
print strtemp+self.name
# 枝節(jié)點(diǎn)
class Composite(Component):
def __init__(self, name):
self.name = name
self.children = []
def add(self,comp):
self.children.append(comp)
def remove(self,comp):
self.children.remove(comp)
def display(self, depth):
strtemp = ''
for i in range(depth):
strtemp += strtemp+'-'
print strtemp+self.name
for comp in self.children:
comp.display(depth+2)
if __name__ == "__main__":
#生成樹(shù)根
root = Composite("root")
#根上長(zhǎng)出2個(gè)葉子
root.add(Leaf('leaf A'))
root.add(Leaf('leaf B'))
#根上長(zhǎng)出樹(shù)枝Composite X
comp = Composite("Composite X")
comp.add(Leaf('leaf XA'))
comp.add(Leaf('leaf XB'))
root.add(comp)
#根上長(zhǎng)出樹(shù)枝Composite X
comp2 = Composite("Composite XY")
#Composite X長(zhǎng)出2個(gè)葉子
comp2.add(Leaf('leaf XYA'))
comp2.add(Leaf('leaf XYB'))
root.add(comp2)
# 根上又長(zhǎng)出2個(gè)葉子,C和D,D沒(méi)張昊,掉了
root.add(Leaf('Leaf C'))
leaf = Leaf("Leaf D")
root.add(leaf)
root.remove(leaf)
#展示組織
root.display(1)
運(yùn)行結(jié)果如下:

上面類的設(shè)計(jì)如下圖:

應(yīng)用場(chǎng)景:
在需要體現(xiàn)部分與整體層次的結(jié)構(gòu)時(shí)
希望用戶忽略組合對(duì)象與單個(gè)對(duì)象的不同,統(tǒng)一的使用組合結(jié)構(gòu)中的所有對(duì)象時(shí)
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門(mén)與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python中使用OpenCV進(jìn)行人臉檢測(cè)的例子
這篇文章主要介紹了python中使用OpenCV進(jìn)行人臉檢測(cè)的例子,需要的朋友可以參考下2014-04-04
python實(shí)現(xiàn)簡(jiǎn)易的學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)易的學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Python之print函數(shù)里逗號(hào)和加號(hào)的區(qū)別及說(shuō)明
這篇文章主要介紹了Python之print函數(shù)里逗號(hào)和加號(hào)的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
python?字符串模糊匹配Fuzzywuzzy的實(shí)現(xiàn)
本文主要介紹了python?字符串模糊匹配Fuzzywuzzy的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
python3使用迭代生成器實(shí)現(xiàn)減少內(nèi)存占用
這篇文章主要介紹了python3使用迭代生成器實(shí)現(xiàn)減少內(nèi)存占用的相關(guān)資料,需要的朋友可以參考下2021-05-05
Python應(yīng)用開(kāi)發(fā)之實(shí)現(xiàn)串口通信
在嵌入式開(kāi)發(fā)中我們經(jīng)常會(huì)用到串口,串口通信簡(jiǎn)單,使用起來(lái)方便,且適用場(chǎng)景多。本文為大家準(zhǔn)備了Python實(shí)現(xiàn)串口通信的示例代碼,需要的可以參考一下2022-11-11
pytorch 實(shí)現(xiàn)在測(cè)試的時(shí)候啟用dropout
這篇文章主要介紹了pytorch 實(shí)現(xiàn)在測(cè)試的時(shí)候啟用dropout的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05

