📖
デザインパターン Iteratorパターンの学習
参考にしたもの
【脱オブジェクト指向初心者!】TypeScriptで学ぶSOLID原則・デザインパターン
Java言語で学ぶデザインパターン入門第3版
Iteratorパターンとは?
Iteratorの構成要素
- Iterator
- ConcreteIterator
- Aggregate
- ConcreteAggregate
Iterator
コレクションを探索するために必要な操作を定義するインターフェースです。
次の要素が存在するかどうかのhasNextメソッドと、次の要素を得るためのnextメソッドを定めています。
ConcreteIterator
Iteratorで定義したメソッドを実装するクラスです。
ConcreteIteratorの実装によって探索の内容を変更することができます。
探索を行うコレクションをフィールドに持ちます。
Aggregate
探索を行うコレクションを表すインターフェースです。
Iteratorを生成するためのメソッドを定義します。
ConcreteAggregate
Aggregateで定義したメソッドを実装するクラスです。
ConcreteIteratorクラスの新しいインスタンスを返却します。
Iteratorのメリット・デメリット
Iteratorのメリット
- 利用者がコレクションの小さなデータ構造を知る必要がなくなります。
- コレクションの実装と探索のためのアルゴリズムを分離することができます。
- 既存のコードに修正を加えることなく、新しい種類のコレクションやイテレーターを追加できます。
Iteratorのデメリット
- 単純なコレクションの場合、Iteratorを使用しない方がコードがシンプルになります。
Iteratorのクラス図
Iteratorを使う理由とは?
実装と切り離して繰り返し操作を行えるからです。
while (it.hasNext()) {
Book book = it.next();
System.out.println(book.getName());
}
ここで使われているのは、hasNextとnextというIteratorのメソッドだけです。
hasNextとnextのメソッドが正しく実装されているインスタンスを返してくれれば、上記のwhileループは全く変更しなくても動作します。
これにより、処理の再利用化が促進されて、クラスを部品として使いやすくできます。
Discussion