Python设计模式之组合模式原理与用法实例分析

 更新时间:2019年01月11日 09:56:31   作者:Andy冉明  
这篇文章主要介绍了Python设计模式之组合模式,结合具体实例形式分析了Python组合模式的相关概念、原理、定义及使用方法,需要的朋友可以参考下

本文实例讲述了Python设计模式之组合模式原理与用法。分享给大家供大家参考,具体如下:

组合模式(Composite Pattern):将对象组合成成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.

下面是一个组合模式的demo:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——组合模式
组合模式(Composite Pattern):将对象组合成成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.
"""
# 抽象一个组织类
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
# 叶子节点
class Leaf(Component):
  def add(self,comp):
    print '不能添加下级节点'
  def remove(self,comp):
    print '不能删除下级节点'
  def display(self, depth):
    strtemp = ''
    for i in range(depth):
      strtemp += strtemp+'-'
    print strtemp+self.name
# 枝节点
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)

运行结果如下:

上面类的设计如下图:

应用场景:

在需要体现部分与整体层次的结构时

希望用户忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

您可能感兴趣的文章:

相关文章

  • Python 将pdf转成图片的方法

    Python 将pdf转成图片的方法

    下面小编就为大家分享一篇Python 将pdf转成图片的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python中使用OpenCV进行人脸检测的例子

    python中使用OpenCV进行人脸检测的例子

    这篇文章主要介绍了python中使用OpenCV进行人脸检测的例子,需要的朋友可以参考下
    2014-04-04
  • python实现简易的学生信息管理系统

    python实现简易的学生信息管理系统

    这篇文章主要为大家详细介绍了python实现简易的学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Python之print函数里逗号和加号的区别及说明

    Python之print函数里逗号和加号的区别及说明

    这篇文章主要介绍了Python之print函数里逗号和加号的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 详解如何使用Python提取视频文件中的音频

    详解如何使用Python提取视频文件中的音频

    在多媒体处理中,有时我们需要从视频文件中提取音频,本文为大家整理了几种使用Python编程语言提取视频文件中的音频的方法,大家可以根据需要进行选择
    2025-03-03
  • Python如何读取base64图片数据

    Python如何读取base64图片数据

    在Python中,使用base64模块可以解码Base64编码的图片数据,首先需要去除Base64字符串的前缀,然后使用base64.b64decode()函数进行解码,最后将解码后的数据保存为图片文件,适用于各种MIME类型的Base64编码
    2024-09-09
  • python 字符串模糊匹配Fuzzywuzzy的实现

    python 字符串模糊匹配Fuzzywuzzy的实现

    本文主要介绍了python 字符串模糊匹配Fuzzywuzzy的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • python3使用迭代生成器实现减少内存占用

    python3使用迭代生成器实现减少内存占用

    这篇文章主要介绍了python3使用迭代生成器实现减少内存占用的相关资料,需要的朋友可以参考下
    2021-05-05
  • Python应用开发之实现串口通信

    Python应用开发之实现串口通信

    在嵌入式开发中我们经常会用到串口,串口通信简单,使用起来方便,且适用场景多。本文为大家准备了Python实现串口通信的示例代码,需要的可以参考一下
    2022-11-11
  • pytorch 实现在测试的时候启用dropout

    pytorch 实现在测试的时候启用dropout

    这篇文章主要介绍了pytorch 实现在测试的时候启用dropout的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05

最新评论