什么是组合模式
将对象组合成树形结构以表示“部分-整体”的层次结构,Composite 使得用户对单个对象和组合对象的使用具有一致性,用户可以统一地使用组合结构中的所有对象。(注:择自设计模式的黑书)
最简单的最常用的例子就是 UIView 了,典型的树形结构。
标准组成
- Component:组合中的抽象接口
- Composite:子结点
- Leaf:子结点
结构
这里直接以树为例:
实现
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 的代码,再看上面代码,应该可以进一步加深理解组合模式。
小结
比较容易理解的一种设计模式,总之,最关键的就是一句话:使得用户对单个对象和组合对象的使用具有一致性。