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

什么是组合模式

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

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

标准组成

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

结构

这里直接以树为例:

图片.png

实现

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 的代码,再看上面代码,应该可以进一步加深理解组合模式。

小结

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容