イテレータパターン

この記事で紹介するデザインパターン

イテレータ(Iterator) パターン

どんなデザインパターン?

いつもどおりウェキペディアから参照

Iterator パターン(イテレータ・パターン)とは、GoF(Gang of Four; 4人のギャングたち)によって定義されたデザインパターンの1つである。コンテナオブジェクトの要素を列挙する手段を独立させることによって、コンテナの内部仕様に依存しない反復子を提供することを目的とする。

ポイントは以下だろうか
・集合オブジェクト(要素の集まり)に対して順番にアクセスする方法を提供する
・集合オブジェクト(要素の集まり)自体には実装せず、外部イテレータクラスとして実装することで、集合オブジェクトがどのように集合データを保持しているか使う側は気にしなくて良い

集合オブジェクトの例

集合オブジェクトの例は
・本と本棚
・ビールケースとビール
のように要素とその要素の入れ物みたいな関係です。

Rubyのコードで簡単な例を紹介してみる

登場人物
・MyFileクラス(要素)
・Directoryクラス(MyFileの集合を保持)
・DirectoryIteratorクラス。要素の順番にアクセスする手段を提供するクラス

# MyFileクラス

ファイル名だけを属性に持つシンプルなクラス。

次にファイルを格納できるディレクトリクラス。

最後に要素(ファイル)に順番にアクセスする機能を提供するイテレータクラス。

directoryとindexを属性に持つ。
next_fileでファイルのアクセスすることができる。

コードをコンソールから試してみる

ちなみに

今回紹介したパターンは外部イテレータと呼ばれる。
外部イテレータの他に、内部イテレータというものもあり、Rubyではこちらのほうが一般的かもしれない。
内部イテレータとは、集合オブジェクト自身が順次アクセスする手段を提供するパターンのことを言う。
例えば、以下のようなRubyのarrrayは

このように、array(重合オブジェクト)自身にeachというメソッドがあり、arrayの中身にアクセスすることができる。

まとめ

・イテレータパターンとは集合オブジェクトに対して順次アクセスする機能を提供することを可能にする
・集合自身とは別にその機能を提供するクラスがある

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク