美文网首页iOSiOS开发记录iOS开发
iOS&设计模式 - 组合模式(Composite)

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

作者: YxxxHao | 来源:发表于2017-07-23 17:37 被阅读626次

    什么是组合模式

    将对象组合成树形结构以表示“部分-整体”的层次结构,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 的代码,再看上面代码,应该可以进一步加深理解组合模式。

    小结

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

    相关文章

      网友评论

        本文标题:iOS&设计模式 - 组合模式(Composite)

        本文链接:https://www.haomeiwen.com/subject/laumkxtx.html