组合模式
定义
组合模式(Composite Pattern):将对象组合成树形结构,以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
场景
在需要体现部分与整体层次的结构时。
希望用户忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时。
例如
描述一家公司的层次结构,那么我们用部门来表示节点,则总经理部门是根节点,下面分别由人事部门、业务部门、生产部门、财务办部门,每个部门下面可以还有更小的部门,每个部门都有职责、人员数、人员薪资等属性。
实现
class DepartmentBase:
"""
部门抽象出来的基类
"""
def __init__(self, name):
self.name = name
def add(self, obj):
pass
def remove(self, obj):
pass
def display(self, number):
pass
class Node(DepartmentBase):
def __init__(self, name, duty):
super().__init__(name)
self.name = name
self.duty = duty
self.children = []
def add(self, obj):
self.children.append(obj)
def remove(self, obj):
self.children.remove(obj)
def display(self, number=1):
print("级别:{} 部门:{} 职责:{}".format(number, self.name, self.duty))
n = number + 1
for obj in self.children:
obj.display(n)
if __name__ == '__main__':
root = Node("总经理部门", "发工资")
node1 = Node("财务部门", "管钱")
root.add(node1)
node2 = Node("业务部门", "销售产品")
root.add(node2)
node3 = Node("生产部门", "生产产品")
root.add(node3)
node4 = Node("销售事业一部门", "A产品销售")
node2.add(node4)
node5 = Node("销售事业二部门", "B产品销售")
node2.add(node5)
root.display()
"""
输出:
级别:1 部门:总经理部门 职责:发工资
级别:2 部门:财务部门 职责:管钱
级别:2 部门:业务部门 职责:销售产品
级别:3 部门:销售事业一部门 职责:A产品销售
级别:3 部门:销售事业二部门 职责:B产品销售
级别:2 部门:生产部门 职责:生产产品
"""