组合模式-Python实现

组合模式

定义

组合模式(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 部门:生产部门 职责:生产产品
    """

你可能感兴趣的:(设计模式之美,设计模式,python)