はじめに
各デザインパターンが「どんな場合に有用なのか」の一覧があったら便利かと思いまとめてみました。GoFの23パターンの他に「Game Programming Patterns」のパターンも掲載してます。
生成に関するパターン
| パターン名 | 使いどころ |
|---|---|
| Abstract Factory | XならA,B,Cが、YならD,E,Fが欲しい、みたいなとき |
| Builder | オブジェクトの生成ステップが複雑なとき |
| Factory Method | どの具象クラスを使うのか隠したいとき |
| Prototype |
Clone()したいとき |
| Singleton | インスタンスが2つ以上あってほしくないとき |
構造に関するパターン
| パターン名 | 使いどころ |
|---|---|
| Adapter | ごちゃごちゃしてる表面を綺麗にしたいとき |
| Bridge | 継承地獄をいい感じに分割したいとき |
| Composite | フォルダの中にファイルとフォルダどちらも置きたい、みたいなとき |
| Decorator | インスタンスに動的に機能を追加したいとき |
| Facade | アクセスするクラスを1つにまとめたいとき |
| Flyweight | 数種類のオブジェクトが大量にあるとき |
| Proxy | オブジェクトを仮置きしたいとき |
振る舞いに関するパターン
| パターン名 | 使いどころ |
|---|---|
| Chain of Responsibility | 自分が担当なら処理するけど違ったら後続に流す、みたいなとき |
| Command | イベントに対するアクションを入れ替えたいとき |
| Interpreter | 構文木をつくるとき |
| Iterator | ForEachしたいとき |
| Mediator | MVCのCが色々と取りもつ感じをやりたいとき |
| Memento | Undo/Redoしたいとき |
| Observer | イベント発火に対するアクション実行を発火側から分離したいとき |
| State | 状態ごとに処理をまるっと切りかえたい時 |
| Stratgy | アルゴリズム的な処理を入れ替えたいとき |
| Template Method | 一連の処理の流れが決まってて具体的には色々パターンがあるとき |
| Visitor | ダブルディスパッチしたいとき |
GPP/シーケンスのパターン
| パターン名 | 使いどころ |
|---|---|
| Double Buffer | Screen Tearingを回避したいとき |
| Game Loop | ゲームエンジンを作りたいとき |
| Update Method | 毎フレーム更新したいとき |
GPP/ビヘイビアのパターン
| パターン名 | 使いどころ |
|---|---|
| Bytecode | オレオレスクリプティング言語を作りたいとき |
| Subclass Sandbox | 共通する処理は多いけど処理の順番は各サブクラスが決めたいとき |
| Type Object | JSONなどを元に1クラスで複数の種族とかを生成したいとき |
GPP/分離のパターン
| パターン名 | 使いどころ |
|---|---|
| Component | 細かい単位で柔軟に機能を追加したいとき |
| Event Queue | イベントに対するアクション実行タイミングを中央管理したいとき |
| Service Locator | 柔軟なSingletonが欲しいとき |
GPP/最適化のパターン
| パターン名 | 使いどころ |
|---|---|
| Data Locality | 高速で配列をまわしたいとき |
| Dirty Flag | つど計算すると重くなるとき |
| Object Pool | 生成の重いオブジェクトが何度も必要なとき |
| Spatial Partition | 効率的に衝突判定したいとき |
P.S.
すべて「一言で」まとめようと頑張ったのですが、日本語って難しいですね。細かなことでも構いませんので、気づいたことなど気軽にコメントください![]()