デザインパターンまとめ①
ほぼすべて理解できていないため、ひとまず知識を整理するために書いた。
どういう設計をする場合にどのパターンを用いるか確認することで理解を一段上に。
共通するのは設計と実装を分けること。機能を拡張しやすくすること。
クラスを呼び出す側がそのクラスの実装を知らなくてもいいように、クッションの役割を果たすこと。
部品としてプログラムを利用できるようにする、すなわち他の部品と入れ替えても動作するようにする。
そのためにインターフェースと抽象クラスで実装されるメソッドを保証する。(subclass responsibility)
デザインパターンは相互関係。
Iterator
次の要素が存在するかどうかを返すhasNextメソッド、
次の要素を返すnextメソッドを持つ。
Iteratorを使う側は対象の実装について知る必要はない。
集合体の要素のカウント、取得などに用いられる。
Adapter
対象のインターフェースに合うように、すでに存在するクラスを継承し、拡張する。
実績のあるAPIを利用して新しいクラスを作る。
互換性を維持するさいなどに用いられる。
Template Method
スーパークラスで処理の枠組みを定める。
テンプレートメソッドの定義に抽象メソッドを用いる。
サブクラスでは抽象メソッドを実装する。
テンプレートメソッドによりロジックが共通化される。
同じロジックを用いて処理を行うが出力が異なる場合に用いる。
Prototype
newではなく、コピーして新しいインスタンスを生成する。
最初にインスタンスが生成された方法を知らなくても、コピーしてインスタンスを生成できる。
GUI操作によってインスタンスが生成されるドローツールなどで利用。
自分自身を複製するcloneメソッドは自分からかサブクラスからしか呼び出せない。
cloneメソッドは参照渡し。
Builder
Template Methodと同じく、ロジックを共通化する。
違いはDirectorの存在。
Directorでロジックを1つのメソッドにしてしまえば、利用側から知るべき情報が少ない?
Abstract Factory
FactoryyMethodと同じに見える。
Bridge
機能と実装を分ける。