Rust语言之GoF设计模式:迭代器模式


迭代器是一种行为设计模式,它允许顺序遍历复杂的数据结构而不暴露其内部细节。

标准迭代器
迭代器在Rust惯用语中被大量使用:

let array = &[1, 2, 3];
let iterator = array.iter();

// Traversal over each element of the vector.
iterator.for_each(|e| print!(
"{}, ", e));

自定义迭代器
在 Rust 中,定义自定义迭代器的推荐方法是使用标准std::iter 的Iterator trait

impl Iterator for UserIterator<'_> {
    fn next(&mut self) -> Option<Self::Item>;
}


let users = UserCollection::new();
let mut iterator = users.iter();

iterator.next();

上述代码方法next是唯一Iterator必须实现的trait方法。它可以访问大量的标准方法,例如fold、map、for_each。

Rust 迭代器是惰性的,这意味着它们在被告知之前不会执行。这意味着您可以在迭代器上添加任何一系列操作,并且在您使用它之前它永远不会“运行”。

如果将职责链 责任链 中的过滤器组合成一个集合,那么对这个集合需要迭代应用激活一个个过滤器,Rust这种懒惰是有优势的,只有在运行时才会激活,而不会耗费大量预处理过程。
如果将命令模式中一个个命令组合成一个大集合,那么也需要迭代器。