タイトル: デザインパターン
デザインパターンとはプログラムを実装する上での設計方針です。
デザインパターンに則り実装することで効率の良い開発が可能となります。先人が共通の問題に対して整理した「再利用可能な設計の型」で、Java / C# / PHP / Python など幅広い言語で活用できます。
それぞれのデザインパターンについては項目を参照してください。
本ページの子ページ
- MVC — Model / View / Controller の3層分離。Webアプリで最も基本的なパターン
代表的なデザインパターン(GoF)
GoF(Gang of Four)の23パターンは、生成・構造・振る舞いの3カテゴリに分類されます。
生成に関するパターン
| パターン | 目的 |
|---|---|
| Singleton | クラスのインスタンスを1つに限定する |
| Factory Method | インスタンス生成をサブクラスに委ねる |
| Abstract Factory | 関連オブジェクト群をまとめて生成 |
| Builder | 複雑なオブジェクトを段階的に組み立てる |
| Prototype | 既存インスタンスをクローンして生成 |
構造に関するパターン
| パターン | 目的 |
|---|---|
| Adapter | 互換性のないインターフェースを橋渡し |
| Decorator | 既存オブジェクトに動的に機能を追加 |
| Facade | 複雑なサブシステムに簡単なインターフェースを提供 |
| Proxy | 本物のオブジェクトへのアクセスを代理 |
| Composite | 個と複合を同じインターフェースで扱う(ツリー構造) |
振る舞いに関するパターン
| パターン | 目的 |
|---|---|
| Observer | 状態変化を多数のオブジェクトに通知 |
| Strategy | アルゴリズムを切り替え可能にする |
| Template Method | 処理の骨格を親で、詳細を子で実装 |
| Command | 処理をオブジェクト化し、実行・取消可能に |
| State | 状態に応じて振る舞いを切り替える |
| Iterator | コレクションを順次走査 |
| Chain of Responsibility | 処理を連鎖させて該当者が処理 |
アーキテクチャパターン(GoFとは別系統)
| パターン | 用途 |
|---|---|
| MVC | ロジック・データ・表示の分離。Web開発で定番 |
| MVP / MVVM | クライアントUI向けの派生形(Android、Vue/React等) |
| Repository | データアクセスを抽象化 |
| Service Layer | ビジネスロジックを集約するレイヤ |
| Layered Architecture | プレゼンテーション・サービス・データの層分離 |
| Clean Architecture / Hexagonal | 依存を内側だけに向ける設計 |
使うときの注意
- パターンが先ではない — 問題があってからパターンを当てる。先に当てはめると過剰設計になる
- SOLID原則とセットで考えると効果が大きい(オブジェクト指向言語共通参照)
- 言語の慣用句を優先 — PHPの Singleton は言語機能で代替できる、Pythonでは関数で十分等
- テスト容易性を最優先 — パターン採用でテストが書きにくくなるなら適用を見直す
関連
- 親カテゴリ: Java
- 関連: オブジェクト指向言語共通
- Singletonの具体例: シングルトン