二十七、解决问题的“第三者”----迭代器模式

2017-09-12  本文已影响0人  LeeLeCoder

1. 何为迭代器模式

迭代器提供了一种顺序访问聚合对象(集合)中元素的方法,而无需暴露结构的底层表示和细节。遍历集合中元素的职能从集合本身转移到迭代器对象。迭代器定义了一个用于访问集合元素并记录当前元素的接口。不同的迭代器可以执行不同的遍历策略。

迭代器:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

2. 何时使用迭代器模式

以下情形,自然会想到使用迭代器模式:

3. 迭代器的UML类图

根据类图可以得出如下一个迭代器模式的通用模式代码:

4.代码示例

import Foundation

// 定义一个小说结构体
struct Novella {
    let name: String // 小说名
}

// 定义一个小说集合结构
struct Novellas {
    let novellas: [Novella] // 存放小说
}

// 定义一个小说迭代器(遵循Swift的迭代器协议)
struct NovellasIterator: IteratorProtocol {
    private var current = 0 // 当前索引
    private let novellas: [Novella]
    
    init(novellas: [Novella]) {
        self.novellas = novellas
    }
    
    // 实现协议方法
    mutating func next() -> Novella? {
        defer {
            current += 1
        }
        
        return novellas.count > current ? novellas[current] : nil
    }
}

// 将小说集合遵循Swift序列协议
extension Novellas: Sequence {
    // 实现协议方法(制作一个小说迭代器)
    func makeIterator() -> NovellasIterator {
        return NovellasIterator(novellas: novellas)
    }
}

// MAKE: Usage
// 创建小说迭代器并添加些小说
let greatNovellas = Novellas(novellas: [Novella(name: "The Mist"), Novella(name: "The Mist2")])

// 遍历取出小说阅读
for novella in greatNovellas {
    print("I 've read: \(novella)")
}

运行结果:

5. 优缺点

上一篇 下一篇

猜你喜欢

热点阅读