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程序设计有所帮助。
来源: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