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编程语言的35个与众不同之处(语言特征和使用技巧)
Jul 07 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 Python
解析Python中的eval()、exec()及其相关函数
Dec 20 Python
pandas.DataFrame的pivot()和unstack()实现行转列
Jul 06 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 Python
python等差数列求和公式前 100 项的和实例
Feb 25 Python
更新升级python和pip版本后不生效的问题解决
Apr 17 Python
python3.5的包存放的具体路径
Aug 16 Python
python 爬取B站原视频的实例代码
Sep 09 Python
python Tkinter的简单入门教程
Apr 11 Python
教你怎么用Python selenium操作浏览器对象的基础API
Jun 23 Python
使用python绘制横竖条形图
Apr 21 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安装全攻略:APACHE
2006/10/09 PHP
PHP模块化安装教程
2016/06/01 PHP
动态加载iframe
2006/06/16 Javascript
些很实用且必用的小脚本代码
2006/06/26 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
javascript中打印当前的时间实现思路及代码
2013/12/18 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
JS鼠标拖拽实例分析
2015/11/23 Javascript
理解javascript对象继承
2016/04/17 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
Js获取图片原始宽高的实现代码
2016/05/17 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
Three.js入门之hello world以及如何绘制线
2017/09/25 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
Electron 调用命令行(cmd)
2019/09/23 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
python根据开头和结尾字符串获取中间字符串的方法
2015/03/26 Python
python开发之thread线程基础实例入门
2015/11/11 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
高中生的学习总结自我鉴定
2013/10/26 职场文书
大学生村官工作感言
2014/01/10 职场文书
餐厅采购员岗位职责
2014/03/06 职场文书
计算机专业求职信
2014/06/02 职场文书
银行领导班子四风对照检查材料
2014/09/27 职场文书
客户付款通知书
2015/04/23 职场文书
2015年幼儿园安全工作总结
2015/05/12 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
销售人员管理制度
2015/08/06 职场文书
Python基础详解之邮件处理
2021/04/28 Python
Redis主从复制操作和配置详情
2022/09/23 Redis