デザインパターン(GoF) でざいんぱたーん・ごふ
オブジェクト指向設計パターンGoF再利用SingletonFactory
デザインパターン(GoF)について教えて
簡単に言うとこんな感じ!
ソフトウェア設計で「よく起こる問題の定番解決策」を23個まとめたレシピ集だよ! 「4人のギャング(Gang of Four)」が1994年に本にまとめたから「GoFパターン」と呼ぶんだ。先人の知恵を名前で共有できるから、「ここはFactoryパターンで」一言で伝わるんだ!
デザインパターン(GoF)とは
デザインパターンは、オブジェクト指向ソフトウェア設計で繰り返し発生する問題に対する、実績ある解決策のテンプレートです。1994年にエリック・ガンマ、リチャード・ヘルム、ラルフ・ジョンソン、ジョン・ブリシデスの4人(「Gang of Four:GoF」と呼ばれる)が著書「Design Patterns: Elements of Reusable Object-Oriented Software」で23のパターンを体系化しました。
デザインパターンを知っていると、複雑な設計の意図をパターン名1つで伝えられます。「この部分はSingletonにしてある」「FactoryMethodで拡張しやすくしてある」という会話が成立するのは、パターンという共通言語があるからです。
発注側は詳細を知らなくても、「設計書にデザインパターンが適切に使われているか(または乱用されていないか)」をレビュー時に確認することが品質の指標になります。
GoFの23パターン
生成パターン(5種類):オブジェクトの生成方法
| パターン | 概要 |
|---|---|
| Singleton | クラスのインスタンスが常に1つだけになることを保証 |
| Factory Method | 生成するクラスをサブクラスに決めさせる |
| Abstract Factory | 関連オブジェクトのセットをまとめて生成 |
| Builder | 複雑なオブジェクトを段階的に構築 |
| Prototype | 既存オブジェクトをコピーして新オブジェクトを生成 |
構造パターン(7種類):クラスの組み合わせ方
| パターン | 概要 |
|---|---|
| Adapter | 互換性のないインターフェースを変換する「変換プラグ」 |
| Decorator | オブジェクトに機能を動的に追加する |
| Facade | 複雑なサブシステムへの簡単なインターフェースを提供 |
| Proxy | 本物の代理オブジェクトで制御・ログ・キャッシュを追加 |
| Composite | 木構造のオブジェクトを均一に扱う |
| Bridge | 実装と抽象を分離して独立して変更できるようにする |
| Flyweight | 共有によって多数の細粒度オブジェクトをサポート |
振る舞いパターン(11種類):オブジェクトの責任・アルゴリズム
| パターン | 概要 |
|---|---|
| Observer | 状態変化を複数のオブジェクトに自動通知 |
| Strategy | アルゴリズムをカプセル化して交換可能にする |
| Command | 操作をオブジェクトとして表現。Undo/Redoに使用 |
| Template Method | アルゴリズムの骨格を定義し詳細はサブクラスに委ねる |
| Iterator | コレクションの要素を順番に走査する |
| State | 状態によってオブジェクトの振る舞いを変える |
| Chain of Responsibility | 処理を連鎖させてどれかが担当する |
| Mediator | オブジェクト間の通信を仲介者に集約 |
| Memento | オブジェクトの状態を保存・復元(Undo) |
| Visitor | オブジェクト構造に新しい操作を追加 |
| Interpreter | 言語の文法を解釈するインタープリタ |
歴史と背景
- 1977年 — 建築家クリストファー・アレクザンダーが「パターン・ランゲージ」を提唱。ソフトウェアへのパターン概念の源泉
- 1987年 — ケント・ベックとウォード・カニンガムがSmallTalkにデザインパターンを適用
- 1994年 — GoF(Gang of Four)が「Design Patterns」を出版。オブジェクト指向開発のバイブルに
- 1995年 — OOPSLA(オブジェクト指向学会)でパターンの議論が活発化
- 2000年代 — SOLID原則との組み合わせで「設計のベストプラクティス」が体系化
- 2010年代 — 関数型プログラミングの普及で「GoFパターンは時代遅れ」という議論も。ただし根本的な考え方は現在も有効
代表的パターンの対応関係
関連する規格・RFC
※ GoFデザインパターンは特定の標準規格ではありませんが、以下と関連します。
| 書籍・手法 | 内容 |
|---|---|
| 「Design Patterns」GoF著 | デザインパターンの原典。1994年刊行 |
| 「Head First Design Patterns」 | 視覚的にわかりやすいデザインパターン解説書 |
| SOLID原則 | デザインパターンの多くがSOLID原則を実現するための手段 |
関連用語
- SOLID原則 — デザインパターンの多くがSOLID原則を実現するための手段
- クリーンアーキテクチャ — デザインパターンを建築レベルに昇華させた設計思想
- ヘキサゴナルアーキテクチャ — AdapterパターンとFacadeパターンを建築に応用
- ドメイン駆動設計(DDD) — DDDの戦術的設計にGoFパターンを多く活用
- テスト駆動開発(TDD) — テストしやすい設計にはデザインパターンが活躍
- コードレビュー — パターン名を使った共通言語でレビュー効率が上がる