股东会下面是董事会和监事,董事会下面是总经理,总经理下面是多个副总经理,副总经理下方对应不同的部门,代码描述这样的组合模式
时间: 2023-06-02 11:02:55 浏览: 94
适合使用组合模式来描述这样的层级结构。其中,股东会、董事会和监事属于组合的内部节点,而总经理、副总经理和部门则属于组合的叶子节点。具体实现时,可以定义一个抽象基类表示组合的节点,包含添加、删除子节点、获取子节点等基本方法,然后派生出具体的内部节点和叶子节点类,并在内部节点类中实现组合的相关逻辑。例如:
```
class Component:
def add(self, component):
pass
def remove(self, component):
pass
def get_child(self, index):
pass
def operation(self):
pass
class Composite(Component):
def __init__(self):
self.children = []
def add(self, component):
self.children.append(component)
def remove(self, component):
self.children.remove(component)
def get_child(self, index):
return self.children[index]
class Leaf(Component):
def operation(self):
pass
class ShareholdersMeeting(Composite):
def operation(self):
print("This is a shareholders meeting")
class BoardOfDirectors(Composite):
def operation(self):
print("This is a board of directors")
class Supervisor(Composite):
def operation(self):
print("This is a supervisor")
class CEO(Leaf):
def operation(self):
print("This is a CEO")
class ViceCEO(Composite):
def __init__(self):
self.children = [Sales(), Finance(), HR()]
def operation(self):
print("This is a vice CEO")
class Sales(Leaf):
def operation(self):
print("This is a sales department")
class Finance(Leaf):
def operation(self):
print("This is a finance department")
class HR(Leaf):
def operation(self):
print("This is a HR department")
```
使用时,可以创建各个节点的实例,并通过添加子节点的方式组合成一个树形结构:
```
shareholders_meeting = ShareholdersMeeting()
board_of_directors = BoardOfDirectors()
supervisor = Supervisor()
ceo = CEO()
vice_ceo = ViceCEO()
supervisor.add(ceo)
board_of_directors.add(supervisor)
board_of_directors.add(vice_ceo)
shareholders_meeting.add(board_of_directors)
shareholders_meeting.operation() # This is a shareholders meeting
board_of_directors.operation() # This is a board of directors
supervisor.operation() # This is a supervisor
ceo.operation() # This is a CEO
vice_ceo.operation() # This is a vice CEO
sales = vice_ceo.get_child(0)
sales.operation() # This is a sales department
```