デザインパターンおさらい #1 Iterator

前回の続きで、Iteratorパターンについて説明します。 javaの勉強を兼ねて、javaIterator可能なクラスを実装するための方法を紹介します。

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

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

 

Iterator

ある集合体が存在する時に、その集合の要素全てを走査し、各要素に処理を行うためのパターンです。 for文で配列を走査する方法を、他の集合に対しても行えるように抽象化している。

for (int i = 0; i < list.size(); ++i) { process_element(list[i]); }

for( E element : list) { process_element(element); }

のようにかけるのです.

javaにおいて、AggreateインターフェースはIterableインターフェースである。 Iterableインターフェースはiteratorメソッドが定義されていて、それはIteratorを返す。 Iteratorインターフェースは

  • +hasNext
  • +next
  • +remove

の3つを定義し、Iterableなクラスに対して実装することを義務付けます。

まあ、このパターンは有名で簡単ですね。

デザインパターンおさらい #0 UML

ちょくちょく虫食い勉強していたデザインパターンをおさらいしようと、有名なデザパタ入門書を読むことにしました。これから数回にわたって、読んだ感想とか大事だと思ったことを記録していこうと思います。なにか疑問や間違ってるところがあれば、コメントで指摘していただければ助かります。よろしくお願いします。

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

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

 

UML

継承・実装

最初で紹介されている, 継承と実装の矢印の向きはいつもわからなくなります。 ここで紹介されている、

相手を指すことができるのは相手を知っているときだけです。

というのはすごくわかりやすいです。

  • クラスの継承の際には、子クラスから親クラスに対して (実線)
  • インターフェースの実装の際には、実装クラスからインターフェースに対して(点線)

矢印を引けばいいとわかります。

集約

あるインスタンスをメンバーとして所有する関係のことを集約と呼ぶ。

アクセス制御

  • publie: +publicField, +publicMethod
  • private: -privateField, -privateMethod
  • protected: #protectedField, #protectedMethod

クラスの関連

クラス間の関連を表すために▶を用いる。

  • ClientがTargetを使用: Uses▶
  • FactoryがProductを生成: Creates▶
  • SubjectがObserverに通知: Notifies▶