GoFデザインパターンいつ使う?のまとめ
こういう課題を解決できるGoFデザインパターンがあったはずだけど、どのデザインパターンだったかなーと忘れてしまうことがあるのでまとめました。
振る舞いに関するパターン
パターン名 | 説明 |
---|---|
Iterator | forやwhileで扱うデータがあるとき。 |
Template Method | ある手順通りに処理を実行したいが、 手順の内容に様々なパターンがあるとき。 |
Strategy | アルゴリズムを入れ替えたいとき。 |
Visitor | データ構造とそのデータに関する処理を別にしたいとき。 |
Chain of Responsibility | 複数のオブジェクト全てに処理をお願いしたいとき。 |
Mediator | 複数のオブジェクトにアクセスして、 その結果を別のオブジェクトに伝えなければいけないとき。 |
Observer | あるオブジェクトのイベントを別のオブジェクトに 通知したいとき。 |
Memento | オブジェクトを以前の状態に戻したいとき。 |
State | 状態の変化で動作を変えたいとき。 |
Command | イベントをモノとして扱いたいとき。 例えばイベントの履歴をとりたいとか、 イベントを再実行したいとか。 |
Interpreter | 構文木をつくるとき。 |
構造に関するパターン
パターン名 | 説明 |
---|---|
Adapter | 外部のライブラリや既存のクラスなど、 インタフェースを変えたくないものにアクセスしたいとき。 |
Bridge | 複数の継承関係があるとき。 |
Composite | ツリー構造のデータを扱いたいとき。 |
Decorator | オブジェクトに新しい機能を動的に追加するとき。 |
Facade | 複雑な処理の呼び出しを単純にしたいとき。 |
Flyweight | 使うたびにインスタンスを新しく作りたくないとき。 |
Proxy | 重い処理を本当に必要になったタイミングで実行したいとき。 |
生成に関するパターン
パターン名 | 説明 |
---|---|
Factory Method | Template Methodパターンと同じ。 ある手順通りの処理の実行の時に異なるインスタンスを 使いたいときはFactory Methodを使うといい。 |
Singleton | あるクラスのインスタンスを1回だけしか 生成できないようにしたいとき。 |
Prototype | オブジェクトの複製をしたいとき。 |
Builder | オブジェクトの作り方が複雑で、 オブジェクトを作る時に必要なモノを動的に変えたいとき。 |
Abstract Factory | オブジェクトの作り方が複雑で、 オブジェクトを作る時に必要なモノは固定なとき。 |