美文网首页
1.组合模式

1.组合模式

作者: Mcyboy007 | 来源:发表于2017-02-27 10:37 被阅读0次

让我们能用树形方式创建对象的结构,树里面包含了组合以及个别对象。使用组合结构,我们能把相同的操作应用在组合和个别对象上。即,在大多数情况下,我们可以忽略对象组合和个别对象之间的差别。

/** 组合模式(摘抄自《Head First设计模式》):
  允许你将对象组合成树形结构来表现“整体/部分”层次结构。
  组合能让客户以一致的方式处理个别对象已经对象组合
**/

protocol FileType {
    func getFileName() -> String
    func addFile(file: FileType)
    func deleteFile(file: FileType)
    func display()
}
//延展中给出具体文件不需要实现的方法,类似于抽象类中的方法实现
extension FileType {
    func addFile(file: FileType) {}
    func deleteFile(file: FileType){}
}

class Folder: FileType {
    private var files: Dictionary<String, FileType> = Dictionary<String, FileType>()
    private var folderName: String
    init(folderName: String) {
        self.folderName = folderName
    }
    
    func getFileName() -> String {
        return self.folderName
    }
    
    func addFile(file: FileType) {
        files[file.getFileName()] = file
    }
    
    func deleteFile(file: FileType) {
        files.removeValue(forKey: file.getFileName())
    }
    
    func display() {
        let allKeys = Array(files.keys)
        print(getFileName())
        for i in 0..<allKeys.count {
            files[allKeys[i]]?.display()
        }
    }
}

class BaseFile: FileType {
    private var fileName: String
    init(fileName: String) {
        self.fileName = fileName
    }
    
    func getFileName() -> String {
        return self.fileName
    }
    
    func display() {
        print(getFileName())
    }
}

class SwiftFile: BaseFile {
}

class ObjCFile: BaseFile {
}

//Test
//创建根文件夹
let rootFolder: FileType = Folder(folderName: "根文件夹")
let objcFile1: FileType = ObjCFile(fileName: "objc1.h")
let swiftFile1: FileType = SwiftFile(fileName: "file1.Swift")
rootFolder.addFile(swiftFile1)
rootFolder.addFile(objcFile1)

let subFolder : FileType = Folder(folderName: "子文件夹")
let objcFile2: FileType = ObjCFile(fileName: "objc2.h")
let swiftFile2: FileType = SwiftFile(fileName: "file2.Swift")
subFolder.addFile(swiftFile2)
subFolder.addFile(objcFile2)

rootFolder.addFile(subFolder)

//输出该目录下的所有文件夹和文件名
rootFolder.display()

参考资料:
1)《Header First设计模式》
2)青玉伏案
http://www.cnblogs.com/ludashi/

相关文章

  • 1.组合模式

    让我们能用树形方式创建对象的结构,树里面包含了组合以及个别对象。使用组合结构,我们能把相同的操作应用在组合和个别对...

  • 组合模式

    1. 组合模式 1.1 组合模式的定义 组合模式(Composite): 又称部分-整体模式, 将对象组合成树形结...

  • 15、组合模式(Composite Pattern)

    1. 组合模式 1.1 简介   Composite模式,即组合模式,又叫部分整体模式。Composite模式将对...

  • 大话设计模式(7) --- 组合模式|迭代器模式|单例模式

    1. 组合模式 组合模式,将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象...

  • 设计模式[11]-组合模式-Composite Pattern

    1. 组合模式简介 组合模式(Composite Pattern)是结构性设计模式,又叫“部分-整体”模式,主要用...

  • Android设计模式——组合模式(七大结构型)

    1.组合模式介绍 组合模式(Composite Pattern)也称为部分整体模式,是七大结构型设计模式之...

  • 设计模式组合模式

    1.组合模式的定义及使用场景组合模式也称为部分整体模式,结构型设计模式之一,组合模式比较简单,它将一组相似的对象看...

  • c++组合模式

    1.组合模式简介    组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当...

  • 十八、组合模式(Composite)

    1. 何为组合模式 定义:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象...

  • 设计模式之组合模式

    设计模式之组合模式 1.组合模式的定义 将对象组合成树形结构以表示"部分-整体"的层次结构,使得用户对单个对象和组...

网友评论

      本文标题:1.组合模式

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