iOS&设计模式 - 组合模式(Composite)

什么是组合模式

将对象组合成树形结构以表示“部分-整体”的层次结构,Composite 使得用户对单个对象和组合对象的使用具有一致性,用户可以统一地使用组合结构中的所有对象。(注:择自设计模式的黑书)

最简单的最常用的例子就是 UIView 了,典型的树形结构。

标准组成

  • Component:组合中的抽象接口
  • Composite:子结点
  • Leaf:子结点

结构

这里直接以树为例:

iOS&设计模式 - 组合模式(Composite)_第1张图片
图片.png

实现

Component:

import UIKit

@objc protocol TreeProtocol {
    var trees: Array {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
    
    init() {
        self.trees = Array()
    }
    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 
    
    init() {
        self.trees = Array()
    }
    func doSomething() {
        
    }
}

Composite,Leaf 指一类结点,并不是唯一,其中 Leaf 是无子结点,也可以说是 Composite 的一种特殊情况。结合 UIView 的代码,再看上面代码,应该可以进一步加深理解组合模式。

小结

比较容易理解的一种设计模式,总之,最关键的就是一句话:使得用户对单个对象和组合对象的使用具有一致性

你可能感兴趣的:(iOS&设计模式 - 组合模式(Composite))