组合模式-Python实现

该博客介绍了组合模式的概念,展示了如何通过Python实现组合模式来构建一个公司的部门层级结构。示例中,总经理部门作为根节点,下设财务、业务和生产等部门,每个部门又可以包含子部门。通过这个模式,用户可以方便地操作整个组织结构,无论是单独的部门还是整个组织,操作方式保持一致。
摘要由CSDN通过智能技术生成

组合模式

定义

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值