読者です 読者をやめる 読者になる 読者になる

kyosho5’s blog

貧乏で数学があまり得意ではない理系出身のエンジニアのブログ

デザインパターン勉強メモ①

各パターン整理の前に・・・

・一般に言う「インタフェース」
→そのクラスが持っているメソッドの集まりを指す。そのクラスに対して何らかの処理を行う場合は中にあるメソッドを通じて行う。
Javaで言う「インタフェース」
→interfaceを使って宣言されるもの

UML(Unifiied Modeling Language)
→システムを視覚化したり、仕様や設計を文書化したりするための表現技法
アトリビュート(属性)や、オペレーション(操作)といった概念を持つ(Javaで言うところのフィールドとメソッド)


抽象クラス。抽象メソッド
staticクラス、staticメソッド

シーケンス図(Sequence Diagram)
→プログラムが動くときにどのメソッドがどの順番に実行されるか、どのような事象がどういう順番で起こるかを表現したもの
(時間に従って変化するもの→動的な振る舞い)

※クラス図は時間によって変化しないもの→静的な関係

第1章 Iteratorパターン

for (int i = 0; i < arr.lelngth(); i++) {
    System.out.println(arr[i]);
}

の時の変数iの働きを抽象化し、一般化したもの。

・Aggregateインタフェース
→数え上げを行うものの集合体を表す。
このインタフェースを実装するクラスは、配列やVectorなどの集合体を表す。
このインタフェースではiterator()のみを書く(集合体に対応するIteratorを1つ作成するためのもの)

Iteratorインタフェース
→要素の数え上げを行うもの、ループ変数の役割を示すもの。
もっとも単純なタイプでは
public abstract boolean hasNext(); // 次の要素があるかを示す
public abstract Object next(); //次の要素を返す

・Bookクラス
→コンストラクタでは引数で本の名前を指定する
本の名前を返すgetName()を実装する

・BookShelfクラス implements Aggregate
→本棚を表現するクラス。集合体を表現するためAggregateクラスを実装する
Bookの配列を持っている。iteratorメソッドではBookShelfクラスに対応するIteratorとして
BookShelfIteratorクラスのインスタンスを作成して返す。
本棚の本を数え上げたいときにiteratorメソッドを呼び出す。

・BookShelfIteratorクラス implements Iterator
Iteratorインタフェースを実装する。
hasNext()は次の本があるか否かでbooleanを返す。
next()は今注目している本の次の要素を指す。

iteratorの戻り値をObject型にしておけば、配列でなくVectorなどに変更されても対応できるようになる
→再利用可能な部品となる

第2章 Adapterパターン

既存のクラスなどを用いて新しいクラスなどを実装するときに
返還の役割を果たす。

・Target
→今必要となっているメソッドを定めている役。
インタフェース(継承の場合)やクラス(委譲の場合)などがこれに当てはまる。

・Client
→Targetのメソッドを実際に使う役。サンプルではMainクラスが相当。

・Adaptee
→適合される側。すでに用意されているメソッドを持っている役。

・Adapter
→変換アダプタの役を務める。
クラスによるAdapterパターンの場合はAdapter役は継承を使ってAdaptee役を利用する。
インスタンスによるAdaptenパターンの場合は委譲を使ってAdaptee役を利用する。

ここまでの感想

2週目ということと、やはり実務で曲がりなりにも経験を積んできている分すんなり理解できる部分もかなり多いと思う。
あと、このパターンにピッタリは当てはまらないけども、似たような実装をしている部分もあるのではないかと思う。
より具体的な知識として落とし込み、自由に使いこなせるようになりたい。