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

}
相关推荐
HLC++13 小时前
Linux的进程间通信
android·linux·服务器
爱笑鱼16 小时前
Binder(二):AIDL 生成的 Proxy、Stub 和 Parcel 到底在做什么?
android
爱笑鱼17 小时前
Binder(一):一次方法调用,究竟怎样跨进程执行?
android
壮哥_icon18 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
用户693717500138419 小时前
Claude Code终端日志Token占用实测:一个过滤器砍掉60%-90%
android·前端·后端
蝉蜕日记19 小时前
AccumuPDF高级版 v2.57 | 视图文转换PDF,合并分割压缩
android·智能手机·pdf·生活·软件需求
吐了啊取名字太难19 小时前
美颜系统AI修图本地跑并支持Mac、win、安卓、iOS不卡顿
android·人工智能·windows·数码相机·mac·ai编程
阿pin21 小时前
Android随笔-Retrofit
android·retrofit
想取一个与众不同的名字好难21 小时前
安卓自定义颜色选择器
android
杨充21 小时前
10.可测试性实战设计
设计模式·开源·代码规范