设计模式 - 组合模式 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 23 种设计模式完整知识总结与使用教程
java·c语言·开发语言·python·设计模式
UrSpecial7 分钟前
设计模式:模板方法模式
设计模式·模板方法模式
fetasty10 分钟前
chroot的Linux服务配置-当云服务器真正用起来
android·linux·服务器
Digitally15 分钟前
5 种在安卓手机 / 平板与电脑间同步音乐的方法
android
野生技术架构师26 分钟前
一个简单SQL的深度解析
android·数据库·sql
zh_xuan27 分钟前
Android SharedFlow实现事件总线
android·sharedflow
坏小虎30 分钟前
Expo 快速创建 Android/iOS 应用开发指南
android·ios·rn·expo
csj5030 分钟前
安卓基础之《(27)—真机调试》
android
brahmsjiang32 分钟前
理解Android AOT编译与内存映射:从Zygote启动到页表权限隔离
android·linux·zygote
常利兵35 分钟前
解锁系统设置新姿势:Activity嵌入全解析
android