当前仓库属于暂停状态,部分功能使用受限,详情请查阅 仓库状态说明
18 Star 81 Fork 26

ryanpenn / dart_in_action
暂停

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
29_design_pattern_iterator.dart 1.39 KB
一键复制 编辑 原始数据 按行查看 历史
ryanpenn 提交于 2019-03-27 10:55 . dart programming
/**
迭代器模式(Iterator Pattern)
意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
主要解决:不同的方式来遍历整个整合对象。
何时使用:遍历一个聚合对象。
如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象。
*/
main(List<String> args) {
NameRepository namesRepository = new NameRepository();
for (Iterator iter = namesRepository.getIterator(); iter.hasNext();) {
String name = iter.next();
print("Name : $name");
}
}
//////////////////////////////////////////////////////////////////
///
/// 创建接口
///
abstract class Iterator {
bool hasNext();
Object next();
}
abstract class Container {
Iterator getIterator();
}
///
/// 创建实现了 Container 接口的实体类。实现了 Iterator 接口的类 NameIterator
///
class NameRepository implements Container {
List<String> names = ["Robert", "John", "Julie", "Lora"];
@override
Iterator getIterator() {
return NameIterator(names);
}
}
class NameIterator implements Iterator {
List<String> _names;
int _index = 0;
NameIterator(this._names);
@override
bool hasNext() {
if (_index < _names.length) {
return true;
}
return false;
}
@override
Object next() {
if (this.hasNext()) {
return _names[_index++];
}
return null;
}
}
Dart
1
https://gitee.com/ryanpenn/dart_in_action.git
git@gitee.com:ryanpenn/dart_in_action.git
ryanpenn
dart_in_action
dart_in_action
master

搜索帮助