本文实例讲述了python设计模式之组合模式原理与用法。分享给大家供大家参考,具体如下:
组合模式(composite pattern):将对象组合成成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.
下面是一个组合模式的demo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#!/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