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

上面類的設計如下圖:

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

