-
Notifications
You must be signed in to change notification settings - Fork 205
/
Copy pathcomposite.py
39 lines (26 loc) · 851 Bytes
/
composite.py
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
import abc
class ComponentInterface(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def component_function(self):
pass
class Leaf(ComponentInterface):
def __init__(self, number):
self.number = number
def component_function(self):
print("i'm leaf number: {}".format(self.number))
class Composite(ComponentInterface):
def __init__(self):
self._children = set()
def append_child(self, child):
self._children.add(child)
def remove_child(self, child):
self._children.remove(child)
def component_function(self):
for child in self._children:
child.component_function()
if __name__ == '__main__':
composite = Composite()
for number in range(2):
composite.append_child(Leaf(number))
composite.component_function()