DesignPatterns > Iterator

Iterator


目的

集約オブジェクト(コンテナ)の内部表現を隠蔽したままで、その要素に順番にアクセスする方法を提供する。

構造


注釈

  • イテレータには外部イテレータ(クライアントが繰り返しを制御する)と内部イテレータ(イテレータが繰り返しを制御する)がある。C++ STLが提供するイテレータは外部イテレータの例であり、rubyのクロージャは内部イテレータの例である。外部イテレータでは2つの集合が等しいことを調べられるが、内部イテレータでは難しい。
  • 一般的なイテレータでは、走査中に集約オブジェクトを変更(要素の挿入・削除)するのは危険である。簡単な解決方法は、集約オブジェクトのコピーに対してイテレータを適用することだが、コピーせずに操作中の挿入・削除に対応するイテレータを''robust iterator''と呼ぶ。robust iteratorでは、ほとんどの場合、イテレータを集約オブジェクトに登録しておく方法を採っている。つまり、集約オブジェクトが変更された場合、それに整合するように、イテレータの内部状態も変更される。
  • イテレータを提供する集約オブジェクトは、Compositeのような木構造を持つものでもよい。''Null Iterator''は、木構造の操作を容易にする方法である。


最終更新:2012年02月07日 12:13
添付ファイル