#MOC #Iteratorパターン
[[🗃️デザインパターン]]の1つ。
要素の集まりを保有するオブジェクトで、各要素に順番でアクセスする方法を提供するためのパターン。
```mermaid
classDiagram
Aggregate <|.. BookShelf
Iterator <|.. BookShelfIterator
BookShelf o-- BookShelfIterator : contains
BookShelf o-- Book : contains
class Aggregate{
+Iterator getIterator()
}
class Iterator{
+boolean hasNext()
+Object next()
}
class BookShelf{
+void addBook(Book)
+Iterator getIterator()
}
class BookShelfIterator{
+boolean hasNext()
+Object next()
}
class Book{
-String name
+String getName()
}
```
```java
interface Iterator {
boolean hasNext();
Object next();
}
interface Aggregate {
Iterator getIterator();
}
class Book {
private String name;
public Book(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
class BookShelf implements Aggregate {
private List<Book> books;
public BookShelf() {
this.books = new ArrayList<>();
}
public void addBook(Book book) {
books.add(book);
}
public Iterator getIterator() {
return new BookShelfIterator();
}
private class BookShelfIterator implements Iterator {
private int index;
public boolean hasNext() {
return index < books.size();
}
public Object next() {
return hasNext() ? books.get(index++) : null;
}
}
}
```
## 📚ドキュメント
- [Iterator パターン - Wikipedia](https://ja.wikipedia.org/wiki/Iterator_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3)
- [1. Iteratorパターン 1 | TECHSCORE(テックスコア)](https://www.techscore.com/tech/DesignPattern/Iterator/)
## 📖ノウハウ
## 💁トラブルシューティング