Рубрики
Без рубрики

Шаблоны проектирования – Базовый итератор

Одной из наиболее распространенных вещей в коллекции предметов является возможность перебора коллекции… С тегами java, ооп, производительность, качество кода.

Одной из наиболее распространенных вещей в коллекции предметов является возможность перебора коллекции.

В Java, например, существуют структуры данных, которые позволяют нам создавать коллекции для примитивных данных или наших пользовательских классов.

Вот некоторые из них: ArrayList , LinkedList , HashSet и другие…

У вышеперечисленного есть что-то общее, все они реализуют интерфейсы: Коллекция и Повторяемый .

Это может дать нам возможность сделать наши собственные классы итеративными:)

В этой статье мы рассмотрим, как это сделать.

Как это работает

Ниже приведена упрощенная UML-диаграмма, иллюстрирующая список массивов:

Вышеперечисленные отношения позволяют нам использовать эту магию:

for(String s: stringList){
     // do something with s
      System.out.print(s);
}

Вышесказанное является удобным способом написания цикла foreach на Java, но сам язык переводит его в:

Iterator si = stringList.iterator();

while(si.hasNext()){
   String s = si.getNext();
   // do something with s
    System.out.print(s);
}

Теперь, вооружившись этими знаниями, мы можем выйти за рамки поведения встроенных коллекций по умолчанию и настроить их для наших собственных нужд!

Давайте поиграем с проектом!

Проект: Магазин автозапчастей

получите исходный код здесь

Здесь мы проиллюстрируем настраиваемое поведение, исследуя магазин, который продает автозапчасти, в этой кодовой базе у нас есть класс Warehouse, который содержит список CarPart .

Что мы здесь делаем: Мы будем использовать базовый шаблон итератора для перебора нашего класса склада для деталей автомобиля.

Мы сделаем что-то вроде следующего, чтобы работать:

for(CarPart part: Warehouse){
  // do interesting stuff ...
}

по умолчанию вышесказанное не работает, так как на нашем складе есть поле ArrayList, но, обладая новыми потрясающими возможностями итератора, мы можем это сделать!

в нашем классе складов у нас есть:

public class Warehouse implements Iterable {
  private List carPartList;
  private String location;
...

В нашем классе склада мы добавляем повторяющиеся инструменты:

public class Warehouse implements Iterable 

обратите внимание, что мы использовали тип Деталь автомобиля , так как мы хотим выполнить итерацию по коллекции деталей автомобиля.

также мы внедрим следующее в наш складской класс:

@Override 
public Iterator iterator() {
    return carPartList.iterator();
}

Теперь, когда мы пытаемся просмотреть наш склад, мы просматриваем список запчастей для автомобилей!

// Now this magic is available :)
for(CarPart part: Warehouse){
  // do interesting stuff ...
}

Поздравляю! теперь вы узнали, как взять итерацию в свои руки!

Не стесняйтесь экспериментировать с кодом!!!

Счастливого кодирования!!!

оригинал статьи был опубликован здесь

Оригинал: “https://dev.to/achimoraites/design-patterns-basic-iterator-104c”