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中编写数据库模块的教程
Apr 29 Python
搞笑的程序猿:看看你是哪种Python程序员
Jun 12 Python
python实现堆和索引堆的代码示例
Mar 19 Python
Python自动抢红包教程详解
Jun 11 Python
Python中查看变量的类型内存地址所占字节的大小
Jun 26 Python
python pytest进阶之fixture详解
Jun 27 Python
简单了解python数组的基本操作
Nov 26 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
pytorch读取图像数据转成opencv格式实例
Jun 02 Python
Django封装交互接口代码
Jul 12 Python
基于Python实现下载网易音乐代码实例
Aug 10 Python
Python基于Webhook实现github自动化部署
Nov 28 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基于GD库画五星红旗的方法
2015/02/24 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
2017/06/17 PHP
htm调用JS代码
2007/03/15 Javascript
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
javascript性能优化之DOM交互操作实例分析
2015/12/12 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
python实现在windows服务中新建进程的方法
2015/06/30 Python
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
在python中修改.properties文件的操作
2020/04/08 Python
常用的10个Python实用小技巧
2020/08/10 Python
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
本科生求职简历的自我评价
2013/10/21 职场文书
护理专业求职信
2014/06/15 职场文书
欢迎词怎么写
2015/01/23 职场文书
资料员岗位职责
2015/02/10 职场文书
何玥事迹观后感
2015/06/16 职场文书
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL