Skip to content

Latest commit

 

History

History
27 lines (20 loc) · 1.56 KB

README.md

File metadata and controls

27 lines (20 loc) · 1.56 KB

iterator

コレクション(リスト、スタック、ツリー)などを公開せずに、コレクションの要素をトラバースできるようにする動作設計パターン

内部に複雑なデータ構造がある or その複雑をクライアントから隠したい場合はこれ。

メリット

  • 単一責任の原則。かさばるトラバーサルアルゴリズムを個別のクラスにできる
  • オープンクローズドの原則。何も壊すことなく、新しいタイプのコレクションとイテレーターを実装できる
  • 要素数が分からない or int じゃなくても、Next/HasNext メソッド(次の要素があるか)を使うことで処理できる

デメリット

  • シンプルなコレクションで機能する場合、パターンの適用はやりすぎになるかもしれない
  • 特殊なコレクションの要素を直接操作するよりも効率が低下する場合がある
  • 要素がわかる or int なら for 文で良い

他パターンとの関係性

  • Compositをトラバースできる
  • FactoryMethodで、コレクションサブクラスがコレクションと互換性のあるさまざまなタイプのイテレータを返すことができる
  • Mementoで、現在のイテレーター状態をキャプチャし、ロールバックできる
  • Visitorで複雑なデータ構造をトラバースし、何らかの操作ができる

例題

  • 本棚がある
  • 本をどんどん追加していっても、追加順に呼ぶことができる