设计模式 - 组合模式 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() }")

}
相关推荐
咖啡八杯6 小时前
GoF设计模式——享元模式
java·spring·设计模式·享元模式
weiggle7 小时前
第七篇:状态提升与单向数据流——架构设计的核心
android
xingpanvip7 小时前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
goldenrolan7 小时前
A公司物料替代测试系统 v1.7:从需求到 exe/apk 的 AI 辅助全链路实践
android·自动化测试·软件测试·python·ai
AC赳赳老秦8 小时前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
骇客之技术9 小时前
AutoLua:在安卓上写 Lua 脚本
android·junit·lua
:mnong10 小时前
学习创建结构行为设计模式
设计模式
kiros_wang10 小时前
Android 常见面试题
android
货拉拉技术11 小时前
Hook植入日志协助定位问题方案
android
FlightYe11 小时前
Android投屏MirrorCast全链路
android