网络编程
位置:首页>> 网络编程>> Python编程>> Python设计模式之组合模式原理与用法实例分析

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

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

标签:Python,设计模式,组合模式

本文实例讲述了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

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com