设计模式——组合模式

本文通过一个实例展示了如何使用组合模式来构建公司的组织结构。组合模式允许用户以一致的方式处理单个对象和组合对象,实现了部分-整体的层次结构。在场景中,创建了公司、部门和员工的类,并通过添加和删除方法展示了组织结构的动态维护。这种模式有助于简化客户端代码,使其与对象容器的内部实现解耦。
摘要由CSDN通过智能技术生成

结构型模式

组合模式

定义:

  • 将对象组合成树状结构,以表示:部分-整体的层次结构
  • 组合模式使得用户对单个对象和组合对象的使用具有一致性

角色:

  1. 抽象组件
  2. 叶子组件
  3. 复合组件
  4. 客户端

实现方式

在这里插入图片描述

场景:公司架构
# =========================抽象组件=====================
class Organization:
    def __init__(self, name, decs):
        self.name = name
        self.desc = decs

    def show(self):
        pass


# =========================复合组件=====================
class CompanyOrDepartment(Organization):
    def __init__(self, name, desc):
        self.departments = []
        super().__init__(name, desc)

    def add(self, department):
        self.departments.append(department)

    def remove(self, department):
        self.departments.remove(department)

    def show(self):
        print(self.name, ": ", self.desc)
        for department in self.departments:
            department.show()


# =========================叶子组件=====================
class Employee(Organization):
    def show(self):
        print(self.name, ": ", self.desc)


if __name__ == '__main__':
    company = CompanyOrDepartment("中国移动集团", "中国三大运营商之一")
    department1 = CompanyOrDepartment("中国移动陕西分公司", "办公地址为陕西省西安市高新区高新一路3号16层")
    department2 = CompanyOrDepartment("中国移动四川分公司", "办公地址为成都市高新区天府大道中段801号")
    employee1 = Employee("张三", "公司氛围很棒")
    employee2 = Employee("李四", "公司工作很轻松")
    employee3 = Employee("王五", "工作之余喜欢打游戏")
    employee4 = Employee("赵六", "工作少,可以摸鱼")
    company.add(department1)
    company.add(department2)
    department1.add(employee3)
    department1.add(employee1)
    department2.add(employee1)
    department2.add(employee4)

    employee1.show()
    print('====================================')

    department1.show()
    print("====================================")

    company.show()
张三 :  公司氛围很棒
====================================
中国移动陕西分公司 :  办公地址为陕西省西安市高新区高新一路316层
王五 :  工作之余喜欢打游戏
张三 :  公司氛围很棒
====================================
中国移动集团 :  中国三大运营商之一
中国移动陕西分公司 :  办公地址为陕西省西安市高新区高新一路316层
王五 :  工作之余喜欢打游戏
张三 :  公司氛围很棒
中国移动四川分公司 :  办公地址为成都市高新区天府大道中段801号
张三 :  公司氛围很棒
赵六 :  工作少,可以摸鱼
使用场景
  • 表示对象的部分-整体层次结构(特别是结构为递归的)
  • 希望用户忽略组合对象与单个对象的不同,用户统一的使用组合结构中的所有对象

总结

  1. 组合模式采用树形结构来实现普遍存在的对象容器, 从而将一对多的关系转化成一对一的关系, 使得客户代码可以一致地处理对象和对象容器,无需关系处理的是单个对象,还是组合对象。
  2. 客户代码与复杂的对象容器结构解耦是组合模式的核心, 解耦之后,客户代码将与纯粹的抽象接口–而非对象容器的内部实现结构发生依赖, 从而更能应对变化。
  3. 组合模式在具体实现中,可以让父对象中的子对象反向追溯;如果父对象有频繁的遍历需求可使用缓存技巧来改善效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值