【オブジェクト指向】23のデザインパターンの1つ、Iteratorパターンを紹介します。viewお気に入り追加この記事は私がまとめましたlifeofsnufkinさん1.Iteratorパターンとはデータの取り扱いを、そのデータを保有しているクラスに決めさせるためのものである。出典http://officeimg.vo.msecnd.net/en-us/images/MH900290136.jpg探して追加|アップロードひとまずは、こう考えましょう。あなたが友達の山田さんに、本を貸してもらいに行ったとします。出典http://livedoor.blogimg.jp/otanews/imgs/9/7/97874eb3-s.jpg探して追加|アップロードあなた「山田、ちょっと本を貸してよ。山田さん「良いよ、どんな本が良い?」あなた「そうだなぁ、山田の持ってる"本棚"をちょっと見せてもらえるかな?それで気に入ったのがあれば借りて行くよ。山田さん「うん、良いよ。」お気に入り詳細を見るこれをプログラムに表すと、以下のようになります。お気に入り詳細を見る本の持ち主から本を借りるメソッドさて、あなたにはこの設計の問題点が見えたでしょうか・・・?お気に入り詳細を見るこのプログラムの問題点は、「配列データの持ち主は誰か」という点を考えると分かりやすいかもしれません。お気に入り詳細を見るどういうことかと言いますと、先ほどの例では以下の登場人物(一部例外)が出て来ました。あなた山田さん本棚これをクラス図で表すと、以下のようになります。本棚は山田さんの所有物です。お気に入り詳細を見るクラス図からも分かるように、本棚は山田さんの所有物であり、あなたではありません。お気に入り詳細を見るしかし、プログラム上では、「あなた」が「山田さんの本棚」に対してループ処理を行っていましたね。他人の所有物(=他クラスの要素)に対してあなた(=自クラス)が操作を行ってしまうということが、この設計の問題点なのです。お気に入り詳細を見る3.Iteratorパターンの具体的な実装では、これをIteratorパターンを用いて実装するとどうなるか、見て行きましょう。お気に入り詳細を見る本の持ち主から本を借りるメソッド先ほどは自分で本を1冊1冊探していましたが、こちらでは本の持ち主から渡してもらうようになりました。お気に入り詳細を見る本の持ち主クラス本の持ち主は、それを古い順に渡したり、新しい順に渡したり、ランダムに渡したり、渡したく無いものを渡さなかったりすることが出来ます。お気に入り詳細を見るこれをクラス図で表すと、以下のようになります。お気に入り詳細を見るIterator実装のクラス図お気に入り詳細を見るIteratorパターンを使うと、Meクラス(あなた)はBookShelf(本棚)の存在を知らずとも、Book(本)に対して1つ1つアクセスを行うことが出来ます。見事にこの本棚を、横暴なジャイアニズムから解放した訳です。お気に入り詳細を見るまた逆に言えば、データの持ち主であるBookOwnerは、外部のクラスに対して、BookShelfというデータの集合の存在を隠ぺいすることが出来るのです。データの隠ぺい、カプセル化、というのはオブジェクト指向プログラミングを勉強する上で必ず出てくる言葉ですね。お気に入り詳細を見る4.つまりIteratorパターンとはあるデータの集合からの今回は本棚としました。※「配列」という言葉を使わなかったのは、データの集合が常に単純な配列とは限らない(二次元配列かもしれないし、もっとランダム性の高い集合かもしれない)からです。お気に入り詳細を見るデータの取り出し方を配列の昇順/降順、データの名前順、日付順、アクセスのあった順、お気に入り順など、色々ありますね。お気に入り詳細を見るそのデータの集合を保有しているクラスに山田さんのことです。お気に入り詳細を見る決めさせるためのものである。おわかり頂けたでしょうか?お気に入り詳細を見るいかがでしたか?構成が単純なので、よくデザインパターンの題材として挙げられるIteratorパターンですが、単純過ぎるが故に、そのメリットや目的がいまいち見えにくいものでもありました。「なぜこのパターンを使うのか?」という点にフォーカスを当てて説明をさせて頂きました。楽しんで頂けたのなら、嬉しいですね。four(通称GoF)の23のデザインパターンの学習のためのまとめの一覧です。Corporation。