Python设计模式之组合模式原理与用法实例分析

作者:Andy冉明 时间:2023-04-12 16:15:28 

本文实例讲述了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程序设计有所帮助。

来源:https://www.cnblogs.com/onepiece-andy/p/python-composite-pattern.html

标签:Python,设计模式,组合模式
0
投稿

猜你喜欢

  • Python爬取腾讯视频评论的思路详解

    2021-05-30 23:04:43
  • Linux下mysql 5.6.17安装图文教程详细版

    2024-01-18 10:50:17
  • 使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法

    2024-05-13 09:29:36
  • Python判断对象是否相等及eq函数的讲解

    2022-04-13 03:15:22
  • 聊聊pytorch中Optimizer与optimizer.step()的用法

    2022-03-16 22:45:34
  • Python爬虫PyQuery库基本用法入门教程

    2022-06-26 05:13:02
  • Python批量生成幻影坦克图片实例代码

    2021-04-17 03:16:17
  • Mysql 5.6 "隐式转换"导致的索引失效和数据不准确的问题

    2024-01-22 04:07:47
  • 编写Python脚本抓取网络小说来制作自己的阅读器

    2022-11-06 18:51:03
  • 记Qzone项目组视觉设计标注的前前后后

    2010-03-24 18:03:00
  • Python使用functools模块中的partial函数生成偏函数

    2024-01-01 21:26:47
  • MySQL中的联合索引学习教程

    2024-01-21 23:49:34
  • 微信小程序中data-key属性之数据传输(经验总结)

    2024-04-17 10:03:51
  • package.json版本号符号^和~前缀的区别

    2024-05-02 17:36:11
  • Python编写通讯录通过数据库存储实现模糊查询功能

    2024-01-16 06:39:55
  • python按行读取文件,去掉每行的换行符\\n的实例

    2022-06-01 03:49:43
  • numpy工程实践之np.savetxt()存储数据

    2023-06-19 07:33:11
  • Python处理JSON时的值报错及编码报错的两则解决实录

    2023-11-10 07:12:07
  • php 读取文件头判断文件类型的实现代码

    2023-11-15 09:50:06
  • Pycharm 解决自动格式化冲突的设置操作

    2021-06-14 15:05:31
  • asp之家 网络编程 m.aspxhome.com