1. 조합 모드

2187 단어
트 리 방식 으로 대상 의 구 조 를 만 들 수 있 도록 트 리 에는 조합 과 개별 대상 이 포함 되 어 있 습 니 다.조합 구 조 를 사용 하면 우 리 는 같은 조작 을 조합 과 개별 대상 에 응용 할 수 있다.대부분의 경우 대상 조합 과 개별 대상 간 의 차 이 를 무시 할 수 있다 는 것 이다.
/**     (   《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 = Dictionary()
    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.. 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) 2) 청옥 복안http://www.cnblogs.com/ludashi/

좋은 웹페이지 즐겨찾기