1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ryanpenn-dart_in_action

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
29_design_pattern_iterator.dart 1.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
ryanpenn Отправлено 27.03.2019 05:55 9deeecf
/**
迭代器模式(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;
}
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/ryanpenn-dart_in_action.git
git@api.gitlife.ru:oschina-mirror/ryanpenn-dart_in_action.git
oschina-mirror
ryanpenn-dart_in_action
ryanpenn-dart_in_action
master