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


Posted in Python onJanuary 11, 2019

本文实例讲述了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相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

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

Python 相关文章推荐
python机器学习之神经网络(二)
Dec 20 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
python使用PyQt5的简单方法
Feb 27 Python
Python OpenCV中的resize()函数的使用
Jun 20 Python
PYTHON EVAL的用法及注意事项解析
Sep 06 Python
Pytorch 实现冻结指定卷积层的参数
Jan 06 Python
解决keras backend 越跑越慢问题
Jun 18 Python
Python绘图之柱形图绘制详解
Jul 28 Python
Scrapy爬虫文件批量运行的实现
Sep 30 Python
python 解决函数返回return的问题
Dec 05 Python
python通过配置文件共享全局变量的实例
Jan 11 #Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 #Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 #Python
对Python中实现两个数的值交换的集中方法详解
Jan 11 #Python
对Python模块导入时全局变量__all__的作用详解
Jan 11 #Python
Python实现批量执行同目录下的py文件方法
Jan 11 #Python
python多个模块py文件的数据共享实例
Jan 11 #Python
You might like
php csv操作类代码
2009/12/14 PHP
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
利用php_imagick实现复古效果的方法
2016/10/18 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
Prototype Class对象学习
2009/07/19 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
python中的yield使用方法
2014/02/11 Python
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
python3+PyQt5实现柱状图
2018/04/24 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
.NET概念性的面试题
2012/02/29 面试题
集体婚礼证婚词
2014/01/13 职场文书
春节请假条
2014/04/11 职场文书
文员求职信
2014/07/15 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
2014年销售工作总结
2014/12/01 职场文书
综合办公室岗位职责
2015/04/11 职场文书