システム開発

デザインパターン(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パターンは時代遅れ」という議論も。ただし根本的な考え方は現在も有効

代表的パターンの対応関係

よく使われるパターンと現実の例 生成パターン Singleton → DB接続プール、設定管理 Factory Method → 決済方法の切り替え Builder → 複雑なリクエスト組み立て 構造パターン Adapter → 外部APIとの接続変換 Facade → 複雑なライブラリの窓口化 Decorator → ログ・認証の動的追加 振る舞いパターン Observer → イベント通知、UI更新 Strategy → ソートアルゴリズム切り替え Command → Undo/Redo機能

関連する規格・RFC

※ GoFデザインパターンは特定の標準規格ではありませんが、以下と関連します。

書籍・手法内容
「Design Patterns」GoF著デザインパターンの原典。1994年刊行
「Head First Design Patterns」視覚的にわかりやすいデザインパターン解説書
SOLID原則デザインパターンの多くがSOLID原則を実現するための手段

関連用語