设计模式十二(组合模式,python语言实现)
基本原理请参考相关书籍。直接给实例
组合模式应用在类似组织结构、目录等自包含结构
本文给出目录管理的例子

# -*- coding: utf-8 -*-######################################################## # Composite.py# Python implementation of the Class Client# Generated by Enterprise Architect# Created on: 12-十二月-2012 9:06:54# #######################################################from __future__ import divisionfrom __future__ import print_functionfrom __future__ import unicode_literalsfrom future_builtins import * class Document(object): """This class (a) defines behaviour for components having children, (b) stores child components, and (c) implements child-related operations in the Component interface. """ def __init__(self, name): super(Document,self).__init__() self.name=name pass def Add(self, document): pass def GetChild(self): pass def Operation(self,depth): # forall g in children # g.Operation(); pass def Remove(self, document): pass passclass File(Document): """This class (a) defines behaviour for components having children, (b) stores child components, and (c) implements child-related operations in the Component interface. """ def __init__(self, name): super(File,self).__init__(name) pass def Add(self, document): pass def GetChild(self): pass def Operation(self,depth=1): # forall g in children # g.Operation(); print('-'*depth + self.name) pass def Remove(self, document): pass passclass Folder(Document): """This class (a) defines behaviour for components having children, (b) stores child components, and (c) implements child-related operations in the Component interface. """ m_Document= Document("None") def __init__(self, name): super(Folder,self).__init__(name) self.ls=list() pass def Add(self, document): self.ls.append(document) pass def GetChild(self): print(self.ls) pass def Operation(self,depth=1): # forall g in children # g.Operation(); print('-'*depth + self.name) for child in self.ls: child.Operation(depth+2) pass pass def Remove(self, document): pass pass#客户端 if __name__=="__main__": class Client: """This class manipulates objects in the composition through the Component interface. """ m_Document= Document("None") root= Folder("root") file1=File("file1") root.Add(file1) folder1=Folder("folder1") root.Add(folder1) folder2=Folder("folder2") file2=File("file2") folder2.Add(file2) folder3=Folder("folder3") folder2.Add(folder3) folder1.Add(folder2) root.Operation(1)运行结果: