iOS&設計模式 - 組合模式(Composite)

什么是組合模式

將對象組合成樹形結構以表示“部分-整體”的層次結構,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 的代碼,再看上面代碼,應該可以進一步加深理解組合模式。

小結

比較容易理解的一種設計模式,總之,最關鍵的就是一句話:使得用戶對單個對象和組合對象的使用具有一致性

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容