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

}
相关推荐
氦客3 小时前
Android Compose : 传统View在Compose组件中的等价物
android·compose·jetpack·对比·传统view·等价物·compose组件
神话20093 小时前
Rust 初体验与快速上手指南
android·rust
CheungChunChiu4 小时前
Linux 内核动态打印机制详解
android·linux·服务器·前端·ubuntu
aidou13145 小时前
Android中设置Dialog和自定义布局相同高度
android·dialog·弹窗高度·getwindow
氦客5 小时前
UI编程的发展史 : 结合命令式UI和声明式UI
android·compose·声明式ui·ui编程·命令式ui·ui编程发展史·标记语言
aidou13148 小时前
Android中RecyclerView实现多级列表
android·recyclerview·多级列表·layoutmanager
青风行8 小时前
Android从入门到进阶
android
方白羽8 小时前
Android 开发中,准确判断应用处于“前台(Foreground)”还是“后台(Background)
android·app·客户端
Mart!nHu9 小时前
Android 10&15 Framework 允许设置系统时间早于编译时间
android
老蒋每日coding10 小时前
AI智能体设计模式系列(一)—— 提示词链
设计模式·ai编程