デザインパターンまとめ

オブジェクトの生成に関する


Abstract Factory


Factoryクラスを切り替えることでインスタンスを切り替えることが可能。


Builder


複合化されたインスタンスの生成過程を隠蔽する。


複数のオブジェクトを生成する上で、専用のクラスを用意する際に便利。


Factory Method


機能が複雑になりクラスが多くなった際に使う。


一緒に使いたいオブジェクトを生成する際に利用する。


実際に生成されるインスタンスに依存しない、インスタンスの生成方法を提供する。


Prototype


同じクラスで複数のオブジェクトを作成する際に便利。


毎回コンストラクタを使ってオブジェクトを生成することなくクローンを生成できるので、作業の効率化が見込める。


Singleton


コンストラクタの識別子をprivateにして


インスタンスがプログラムに1つしか存在しないようにする。


インスタンスが欲しいときはMoon moon = Moon.getInstance();として取得する。


オブジェクトを一つだけ生成させるデザインパターン


1つのクラスから1つのオブジェクトだけと制限する際に使う。


 


プログラムの構造に関する


Adapter


本来繋がっていないクラス同士を関連づけることができる。


Bridge


継承元のスーパークラスの抽象メソッドを適切に実装したり、機能を拡張する際に利用する。


クラスなどの実装と、呼び出し側の間の橋渡しをするクラスを用意し、


実装を隠蔽する。(IFをさらにIFimplements


Composite


インターフェースを利用した際に応用の幅が広がる。


Decorator


継承以外の手段で機能を追加することができます。


Facade


Facadeクラスで複数の処理をまとめて行うようにする。


あるケースでAの処理とBの処理を必ずセットで実施する場合、


処理の抜け漏れを防ぐことができる。


1つのメッセージを複数のクラスで処理を行うことができる。


複数人で開発する際、クラスを作る人と使う人がいるかと思うが、


クラスを使う際に楽をさせる作業になる。


Flyweight


無駄なインスタンスを新しく作らず、動作を軽くする。


小さなオブジェクトを数多くロードする状況で効率的に処理できる。


Proxy


インターフェースとメッセージフックを応用するという点で便利。


 


オブジェクトの振る舞いに関する


Chain of Responsibility


メッセージを他のクラスのオブジェクトに送って処理することが可能。


Command


命令を表すオブジェクトをメソッドの引数にすることで、1つの引数で複数のデータと処理を伝えることができる。


Interpreter


インターフェースを使って、構文解析の結果をツリー構造で表示します。


Iterator


オブジェクト間の関連をシンプルにすることができます。複数のつながりをシンプルにできる。


複数の要素を内包するオブジェクトの全ての要素に対して、順番にアクセスする方法を提供する。(next(),hasNext()などを使用)


Mediator


クラス間の疎結合を綺麗に整理することができます。複数のオブジェクトを組み合わせて機能を実装する際に使える。


Memento


オブジェクトの状態を保存したまま元の状態に復元することができる。


Observer


あるオブジェクトの変化を別のオブジェクトに通知させることが可能。


State


if文を利用することなく、状態に対応した処理を行うことができる。


オブジェクトの状態を変化させることで、処理の内容を変えられるようにする。


stateIFにする)


Strategy


クラスを使う人のコードを変更することなくアルゴリズムを変更することが可能になる。


データ構造に対して適用する一連のアルゴリズムカプセル化し、アルゴリズムの切替を容易にする。(共通処理をIFにする)


Template Method


メソッドの機能を部分的に変更するために便利。


Visitor


利用頻度は少ないかもしれませんが、オブジェクトに動的に機能を追加するために利用できる。