На курсах C# регулярно говорят о паттерне "итератор". Зачем он вообще нужен есл
мы можем нужные элементы отправить в коллекцию и работать уже с ней? Зачем нужны пользовательские коллекции если можно использовать стандартные?
Ответы
Ответ 1
Итератор это "не пользовательские коллекции", а инструмент обхода этой коллекци
и не только коллекции, а вообще всего, что можно последовательно перебрать по какому то алгоритму. Обход коллекции всего лишь частный случай.
Алгоритм перебора скрыт внутри итератора, что позволяет иметь отдельно сам объект данных и много итераторов с разными алгоритмами обхода (SRP)
То есть итератор - класс инкапсулирующий в себе какой алгоритм обхода данных со стандартизированным интерфейсом "перечислитель"
Ответ 2
Итератор абстрагирует от вас не только саму коллекцию, но и состояние её обхода
Например, для массива это текущий индекс, для структур, основанных на дереве, это текущи
узел, и так далее. Без итераторов вам пришлось бы для каждой коллекции знать, как именно её обходить, и иметь доступ к её внутренним структурам (например, sorted set, основанный на дереве, обычно не выставляет свои узлы в публичный доступ).
Зачем нужны пользовательские коллекции? Очень просто: стандартные не всегда умею
то, что вам нужно. Например, если вы хотите смоделировать взаимно-однозначное соответствие (то есть типа Dictionary, но чтобы можно было также по значению быстро находить ключ), вам придётся писать свою коллекцию.
Комментариев нет:
Отправить комментарий