一、概念
将对象组合成树形结构以表示"部分-整体"的层次结构,以一致的方式处理树形结构中的所有对象。
|----------------|------------------------------------------------------|
| 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() }")
}