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兔子毒药问题实例分析
Mar 05 Python
Python调用C# Com dll组件实战教程
Oct 12 Python
Python 查看文件的读写权限方法
Jan 23 Python
python使用正则表达式来获取文件名的前缀方法
Oct 21 Python
对Python正则匹配IP、Url、Mail的方法详解
Dec 25 Python
Python使用matplotlib 模块scatter方法画散点图示例
Sep 27 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
Jun 02 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 Python
Python实现JS解密并爬取某音漫客网站
Oct 23 Python
详解Python 3.10 中的新功能和变化
Apr 28 Python
浅谈pytorch中stack和cat的及to_tensor的坑
May 20 Python
健身房被搭讪?用python写了个小米计时器助人为乐
Jun 08 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
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
php判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
javascript关于继承解析
2016/05/10 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
vue路由拦截及页面跳转的设置方法
2018/05/24 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
vue中render函数的使用详解
2018/10/12 Javascript
使用JavaScript保存文本文件到本地的两种方法
2019/01/22 Javascript
python+pyqt实现12306图片验证效果
2017/10/25 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
Python 元类实例解析
2018/04/04 Python
Python实现的计算器功能示例
2018/04/26 Python
python实现简易数码时钟
2021/02/19 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
Django实现文件上传下载功能
2019/10/06 Python
python 求定积分和不定积分示例
2019/11/20 Python
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
新闻专业本科生的自我评价分享
2013/11/20 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
毕业生就业推荐表导师评语
2014/12/31 职场文书
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python
MySQL慢查询优化解决问题
2022/03/17 MySQL
Python实现仓库管理系统
2022/05/30 Python
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python
Nginx配置使用详解
2022/07/07 Servers