オブジェクトの生成に関する
Abstract Factory
Factoryクラスを切り替えることでインスタンスを切り替えることが可能。
Builder
複合化されたインスタンスの生成過程を隠蔽する。
複数のオブジェクトを生成する上で、専用のクラスを用意する際に便利。
Factory Method
機能が複雑になりクラスが多くなった際に使う。
一緒に使いたいオブジェクトを生成する際に利用する。
実際に生成されるインスタンスに依存しない、インスタンスの生成方法を提供する。
Prototype
同じクラスで複数のオブジェクトを作成する際に便利。
毎回コンストラクタを使ってオブジェクトを生成することなくクローンを生成できるので、作業の効率化が見込める。
Singleton
コンストラクタの識別子をprivateにして
インスタンスがプログラムに1つしか存在しないようにする。
インスタンスが欲しいときはMoon moon = Moon.getInstance();として取得する。
オブジェクトを一つだけ生成させるデザインパターン。
1つのクラスから1つのオブジェクトだけと制限する際に使う。
プログラムの構造に関する
Adapter
本来繋がっていないクラス同士を関連づけることができる。
Bridge
継承元のスーパークラスの抽象メソッドを適切に実装したり、機能を拡張する際に利用する。
クラスなどの実装と、呼び出し側の間の橋渡しをするクラスを用意し、
実装を隠蔽する。(IFをさらにIFでimplements)
Composite
インターフェースを利用した際に応用の幅が広がる。
Decorator
継承以外の手段で機能を追加することができます。
Facade
Facadeクラスで複数の処理をまとめて行うようにする。
あるケースでAの処理とBの処理を必ずセットで実施する場合、
処理の抜け漏れを防ぐことができる。
1つのメッセージを複数のクラスで処理を行うことができる。
複数人で開発する際、クラスを作る人と使う人がいるかと思うが、
クラスを使う際に楽をさせる作業になる。
Flyweight
無駄なインスタンスを新しく作らず、動作を軽くする。
小さなオブジェクトを数多くロードする状況で効率的に処理できる。
Proxy
インターフェースとメッセージフックを応用するという点で便利。
オブジェクトの振る舞いに関する
Chain of Responsibility
メッセージを他のクラスのオブジェクトに送って処理することが可能。
Command
命令を表すオブジェクトをメソッドの引数にすることで、1つの引数で複数のデータと処理を伝えることができる。
Interpreter
インターフェースを使って、構文解析の結果をツリー構造で表示します。
Iterator
オブジェクト間の関連をシンプルにすることができます。複数のつながりをシンプルにできる。
複数の要素を内包するオブジェクトの全ての要素に対して、順番にアクセスする方法を提供する。(next(),hasNext()などを使用)
Mediator
クラス間の疎結合を綺麗に整理することができます。複数のオブジェクトを組み合わせて機能を実装する際に使える。
Memento
オブジェクトの状態を保存したまま元の状態に復元することができる。
Observer
あるオブジェクトの変化を別のオブジェクトに通知させることが可能。
State
if文を利用することなく、状態に対応した処理を行うことができる。
オブジェクトの状態を変化させることで、処理の内容を変えられるようにする。
(stateをIFにする)
Strategy
クラスを使う人のコードを変更することなくアルゴリズムを変更することが可能になる。
データ構造に対して適用する一連のアルゴリズムをカプセル化し、アルゴリズムの切替を容易にする。(共通処理をIFにする)
Template Method
メソッドの機能を部分的に変更するために便利。
Visitor
利用頻度は少ないかもしれませんが、オブジェクトに動的に機能を追加するために利用できる。