设计模式 - 组合模式 Composite Pattern

一、概念

将对象组合成树形结构以表示"部分-整体"的层次结构,以一致的方式处理树形结构中的所有对象。

|----------------|------------------------------------------------------|
| Component 组件 | 可以是抽象类或接口,定义统一的处理操作,声明了用于访问和管理子组件的方法,包括添加、删除、获取子组件等。 |
| Composite 复合节点 | 包含了一个持有子节点的集合。 |
| Leaf 叶子节点 | 叶子节点,即单个对象。 |

二、实现

2.1 组件

Kotlin 复制代码
interface IOrganization {
    fun add(employee: IOrganization)
    fun remove(employee: IOrganization)
    fun getSubordinatesCount(): Int
}

2.2 复合节点

Kotlin 复制代码
class Leader(
    private val name: String
) :  IOrganization {
    val subordinates = mutableSetOf<IOrganization>()

    override fun add(employee: IOrganization) {
        subordinates.add(employee)
    }

    override fun remove(employee: IOrganization) {
        subordinates.remove(employee)
    }

    override fun getSubordinatesCount(): Int = subordinates.count()
}

2.3 叶子节点

Kotlin 复制代码
class Staff(
    private val name: String
) : IOrganization {
    override fun add(employee: IOrganization) = throw UnsupportedOperationException("基本员工无法添加下属")
    override fun remove(employee: IOrganization) = throw UnsupportedOperationException("基本员工无法删除下属")
    override fun getSubordinatesCount(): Int = 0
}

2.4 使用

Kotlin 复制代码
fun main() {
    val staff1 = Staff("员工1")
    val staff2 = Staff("员工2")
    val staff3 = Staff("员工2")
    val staff4 = Staff("员工2")
    val leader1 = Leader("组长1")
    val leader2 = Leader("组长2")
    val boss = Leader("店长")

    leader1.add(staff1)
    leader1.add(staff2)
    leader2.add(staff3)
    leader2.add(staff4)
    boss.add(leader1)
    boss.add(leader2)

    println("手下数量${ boss.getSubordinatesCount() }")

}
相关推荐
aaajj3 分钟前
【Android】appops学习
android·学习
煤球王子19 分钟前
学习记录:Android14中的Wifi_Direct(P2P)
android
找藉口是失败者的习惯24 分钟前
【Android】Android 车机 + AI Agent 有没有搞头?
android·人工智能
用户004452159301 小时前
从 Gradle 到 Transform:Android 编译开发 Part 1 - Gradle 构建初探
android
用户004452159301 小时前
Android studio连接GitLab及使用(Windows版本)
android
zhouping@1 小时前
polarctf2025秋
android·web安全·php
0xSec笔记本挖呀瓦呀挖1 小时前
OpenClawWeComzh 实战:安卓 APK 分析与手机取证全自动化基础玩法
android·web安全·网络安全·智能手机·自动化·取证·电子数据取证
jolimark1 小时前
【mysql部署】在ubuntu22.04上安装和配置mysql教程
android·mysql·adb
YSoup1 小时前
MAT最新下载地址及Android内存泄露排查简单使用
android
71-32 小时前
Android studio的安装下载(Android Studio Panda 1 | 2025.3.1 Patch 1 )
android·笔记·学习·android studio