デザインパターンを覚えたい (iterator)

デザインパターンってなに

先人の知恵の塊です。ソースコードを書く上で出てくる共通のパターン集みたいな、うまくコードを書くための方法論みたいな。
GoF本が有名とか、自宅にあるけど読んでないなぁ(遠い目)

デザインパターン知ってると

  1. 設計、コーディングの指標となる
  2. プログラマ間のコードの説明等を効率的に行える

とかメリットがあるのかなと思う。個人的には特に後者がとっても重要だと感じます。実際。自分もわからなくて?とかなることあったし。
コミュニケーションってとっても大事。
コミュニケーションってとっても大事。

この本を参考に勉強する。

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

以前に全部目は通したけど、コード全然書かなかったから、今回はコード作成をメインにやろう。

Iteratorパターン

とある集合体内の要素を順次アクセスするためのパターン。
集合体と反復子のペアを実装し、それ経由で外部プログラムから参照させることで

  • 外部からの共通のアクセス方法の提供
  • 内部構造が変わっても外部実装に影響させない

といった利点を生み出す。詳しくはさっき紹介した書籍をどうぞ。

なにはともあれ実装してみる。本だとJavaだったから、それ以外のオブジェクト指向言語を使いますかね。
初回だしとりあえず道具の揃ってるC++でやってみる。

ソース一式
http://dl.dropbox.com/u/7810000/code/design_pattern/iterator.zip

ヘッダの依存関係のせいで実装クラスのAggregateとIteratorのソースをうまく分離できなかったけど、まあいいや。
実行は次の通り。なお、実行にはg++とomakeが必要です。(omakeはなくても手動でビルドすればおk)

$ unzip iterator.zip
$ cd iterator
$ omake
$ ./iterator_test
book1 : "デザインパターン入門"
book2 : "入門Git"
book3 : "情熱プログラマー"