Kotlin 中的組合模式(Composite Pattern)是一種允許你將對象組合成樹形結構來表示“部分-整體”的層次結構。組合模式使得客戶端對單個對象和復合對象的使用具有一致性。在 Kotlin 中,你可以使用擴展函數和委托來實現組合模式,從而簡化客戶端調用。
以下是一個簡單的 Kotlin 示例,展示了如何使用組合模式和擴展函數簡化客戶端調用:
// 組件接口
interface Component {
fun operation()
}
// 葉子組件
class Leaf : Component {
override fun operation() {
println("Leaf operation")
}
}
// 復合組件
class Composite : Component {
private val children = mutableListOf<Component>()
fun add(child: Component) {
children.add(child)
}
fun remove(child: Component) {
children.remove(child)
}
override fun operation() {
println("Composite operation")
children.forEach { it.operation() }
}
}
// 擴展函數,簡化客戶端調用
fun Component.performOperation() {
operation()
}
fun main() {
val root = Composite()
val leaf1 = Leaf()
val leaf2 = Leaf()
root.add(leaf1)
root.add(leaf2)
root.performOperation() // 輸出: Composite operation, Leaf operation, Leaf operation
}
在這個示例中,我們定義了一個 Component
接口,它包含一個 operation
方法。Leaf
類實現了 Component
接口,表示葉子組件。Composite
類也實現了 Component
接口,表示復合組件。Composite
類包含一個子組件列表,可以添加和刪除子組件。
為了簡化客戶端調用,我們為 Component
接口定義了一個擴展函數 performOperation
,它直接調用 operation
方法。這樣,客戶端代碼可以統一地調用 performOperation
方法,而不需要關心對象是葉子組件還是復合組件。這使得客戶端代碼更簡潔、易讀。