Шаблон проектирования Итератор — Iterator

Рассмотрим восьмой шаблон в серии Design Patterns.

Суть шаблона Итератор — предоставление способа последовательного доступа к элементам множества, независимо от его внутреннего состояния.

Этот шаблон наверно самый популярный, так как каждый программист неявно использует его, когда нужно пройтись по всем элементам коллекции.

Перейдем от слов к коду.

Давайте рассмотрим наш пример. Предположим у нас есть коллекция продуктов, которые имеют тип и мы хотим исходя из типа получить все значения (вспомните фильтры когда вы пытаетесь приобрести товар в онлайн-магазинах).

Сначала обозначим все возможные типы продуктов

У нас будет 4 фильтра — ноутбук, смартфон, телевизор и все продукты.

Далее создадим моделю данных для продукта с 2 полями — тип и имя.

И для простоты создадим некий класс синглтон с некоторыми данными.

10 элементов: 3 ноутбука, 5 смартфонов и 2 телевизора.

Теперь перейдем к самому шаблону. Нам нужен интерфейс итератора.

Итератор должен делать 2 вещи — проверять что есть еще элемент и получать этот следующий элемент.

Напишем некий класс, в котором будет имплентация нашего итератора и инкапсулируем фильтрацию в нем.

Итак, на вход наш класс принимает данные о продуктах и у него 1 метод, получения списка наименований исходя из типа, в нем мы проходим итератором по коллекции и получаем все нужные значения.

Рассмотрим детальней имплементацию итератора.

На вход получаем тип, когда перебираем коллекцию то смотрим, чтобы этот тип совпадал с очередным элементом коллекции или же если тип ВСЕ то пусть вернет нам true, если же совпадения не было, то увеличиваем индекс и идем дальше.

Когда получаем следующий элемент также увеличиваем позицию. Вот и все.

Чтобы было наглядно, рассмотрим разметку главного экрана.

Здесь у нас 4 кнопки для фильтров и сам список продуктов.

И наконец сам код главного экрана.

При создании сразу отображаем все продукты и обрабатываем нажатия на кнопки, передавая в метод тип продукта. Передаем адаптеру значения из коллекции и тип.

В итоге имеем такие скриншоты.

Плюсы шаблона — простота и популярность, зачастую вам и не нужно ничего делать, если конечно у вас не случай с фильтрацией.

Запись опубликована в рубрике Программирование Android, Программирование Java. Добавьте в закладки постоянную ссылку.