最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python設(shè)計(jì)模式之組合模式原理與用法實(shí)例分析

 更新時(shí)間:2019年01月11日 09:56:31   作者:Andy冉明  
這篇文章主要介紹了Python設(shè)計(jì)模式之組合模式,結(jié)合具體實(shí)例形式分析了Python組合模式的相關(guān)概念、原理、定義及使用方法,需要的朋友可以參考下

本文實(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入門與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論

万源市| 北辰区| 吉木萨尔县| 平和县| 那曲县| 博白县| 启东市| 密山市| 大埔区| 绥中县| 新乡县| 常德市| 嘉义市| 广南县| 孟津县| 肇东市| 丰镇市| 丘北县| 遂溪县| 鹰潭市| 道真| 南华县| 河南省| 弋阳县| 缙云县| 永寿县| 兴宁市| 鄂尔多斯市| 武鸣县| 启东市| 中山市| 彩票| 淄博市| 陆良县| 蚌埠市| 黄龙县| 霍州市| 清丰县| 新田县| 康马县| 张家口市|