什么是組合模式
將對象組合成樹形結構以表示“部分-整體”的層次結構,Composite 使得用戶對單個對象和組合對象的使用具有一致性,用戶可以統(tǒng)一地使用組合結構中的所有對象。(注:擇自設計模式的黑書)
最簡單的最常用的例子就是 UIView 了,典型的樹形結構。
標準組成
- Component:組合中的抽象接口
- Composite:子結點
- Leaf:子結點
結構
這里直接以樹為例:

圖片.png
實現(xiàn)
Component:
import UIKit
@objc protocol TreeProtocol {
var trees: Array<TreeProtocol> {get}
func doSomething()
@objc optional func addChild(child: TreeProtocol)
@objc optional func removeChild(child: TreeProtocol)
@objc optional func getChildren(index: Int) -> TreeProtocol
@objc optional func clear()
}
Composite:
import UIKit
class Tree: TreeProtocol {
var trees: Array<TreeProtocol>
init() {
self.trees = Array<TreeProtocol>()
}
func doSomething() {
}
func addChild(child: TreeProtocol) {
self.trees.append(child)
}
func removeChild(child: TreeProtocol) {
}
func getChildren(index: Int) -> TreeProtocol {
return self.trees[index]
}
func clear() {
self.trees.removeAll()
}
}
Leaf:
import UIKit
class Leaf: TreeProtocol {
var trees: Array<TreeProtocol>
init() {
self.trees = Array<TreeProtocol>()
}
func doSomething() {
}
}
Composite,Leaf 指一類結點,并不是唯一,其中 Leaf 是無子結點,也可以說是 Composite 的一種特殊情況。結合 UIView 的代碼,再看上面代碼,應該可以進一步加深理解組合模式。
小結
比較容易理解的一種設計模式,總之,最關鍵的就是一句話:使得用戶對單個對象和組合對象的使用具有一致性。