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使用PyFetion来发送短信的例子
Apr 22 Python
使用Python求解最大公约数的实现方法
Aug 20 Python
Python下rrdtool模块的基本使用方法
Nov 13 Python
详解MySQL数据类型int(M)中M的含义
Nov 20 Python
Python爬豆瓣电影实例
Feb 23 Python
人生苦短我用python python如何快速入门?
Mar 12 Python
Python3实现腾讯云OCR识别
Nov 27 Python
详解Python odoo中嵌入html简单的分页功能
May 29 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 Python
Python打印特殊符号及对应编码解析
May 07 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中的登陆login
2007/01/18 PHP
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
PHP串行化与反串行化实例分析
2016/12/27 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
常用Extjs工具:Extjs.util.Format使用方法
2012/03/22 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
JS实现图片预加载之无序预加载功能代码
2017/05/12 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
2017/12/26 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
Linux下Python获取IP地址的代码
2014/11/30 Python
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
python提取页面内url列表的方法
2015/05/25 Python
python获取外网ip地址的方法总结
2015/07/02 Python
Python的多态性实例分析
2015/07/07 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
2016/06/03 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
HTML5 canvas基本绘图之绘制曲线
2016/06/27 HTML / CSS
小橄榄树:Le Petit Olivier
2018/04/23 全球购物
测绘工程个人的自我评价
2013/11/23 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
旅游项目合作意向书
2015/05/08 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
Nginx速查手册及常见问题
2022/04/07 Servers
Redis 限流器
2022/05/15 Redis