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中的try和finally和with方法
May 05 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 Python
Python用threading实现多线程详解
Feb 03 Python
PyQt5实现五子棋游戏(人机对弈)
Mar 24 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
pyQt5实时刷新界面的示例
Jun 25 Python
Django 路由控制的实现
Jul 17 Python
Pandas透视表(pivot_table)详解
Jul 22 Python
Python3.0 实现决策树算法的流程
Aug 08 Python
将python依赖包打包成window下可执行文件bat方式
Dec 26 Python
pygame用blit()实现动画效果的示例代码
May 28 Python
多个版本的python共存时使用pip的正确做法
Oct 26 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
用Simple Excel导出xls实现方法
2012/12/06 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
2016/01/27 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
flash javascript之间的通讯方法小结
2008/12/20 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
基于jquery编写分页插件
2016/03/07 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
vue实现购物车列表
2020/06/30 Javascript
Python中的默认参数详解
2015/06/24 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
Python----数据预处理代码实例
2019/03/20 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
少儿节目主持串词
2014/04/02 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
结婚保证书
2015/01/16 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
网络营销实训总结
2015/08/03 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
实验心得体会范文
2016/01/25 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript