LESSON 25分

ストーリー

高橋アーキテクト
将棋に定跡があるように、ソフトウェア設計にも定石がある
高橋アーキテクト
それがデザインパターン — GoF(Gang of Four)が1994年に体系化した23のパターンだ。先人たちが何度も遭遇した問題と、その解決策のカタログだよ
あなた
全部覚えるんですか?
高橋アーキテクト
暗記する必要はない。重要なのは”こういう問題にはこういうパターンがある”という引き出しを持つことだ

デザインパターンの歴史

1994年、Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides の4人(Gang of Four = GoF)が著書『Design Patterns: Elements of Reusable Object-Oriented Software』で23のデザインパターンを体系化しました。

これらのパターンは「発明」されたものではなく、多くのソフトウェアプロジェクトで繰り返し使われていた解決策を「発見」し、名前をつけたものです。


パターンを学ぶ意義

1. 共通の語彙を持てる

// パターンを知らない場合
「このオブジェクトの生成を、条件によって別のクラスに切り替えたいんですが、
 生成ロジックを呼び出し側から隠蔽して、インターフェースだけ公開する形で......

// パターンを知っている場合
「ここは Factory Method パターンを使おう」

チーム全員がパターンの名前と意味を共有していれば、設計の議論が格段に効率的になります。

2. 車輪の再発明を避けられる

同じ問題を先人が何十年も前に解決しています。その知恵を活用しない手はありません。

3. SOLID原則の具体的な適用例

デザインパターンの多くは、SOLID原則を実現するための具体的な構造です。

パターン関連するSOLID原則
StrategyOCP, DIP
Factory MethodOCP, DIP
ObserverOCP, SRP
DecoratorOCP, SRP
AdapterISP, DIP

GoF 23パターンの分類

生成パターン(Creational Patterns)— 5つ

オブジェクトの生成に関するパターンです。

パターン一言説明
Factory Methodサブクラスに生成を委ねる
Abstract Factory関連するオブジェクト群をまとめて生成する
Builder複雑なオブジェクトを段階的に構築する
Singletonインスタンスを1つだけに保証する
Prototype既存オブジェクトをコピーして生成する

構造パターン(Structural Patterns)— 7つ

クラスやオブジェクトの組み合わせに関するパターンです。

パターン一言説明
Adapter互換性のないインターフェースを接続する
Bridge抽象と実装を分離する
Composite木構造を統一的に扱う
Decorator動的に機能を追加する
Facade複雑なサブシステムに簡単な窓口を提供する
Flyweight共有でメモリを節約する
Proxyアクセスを制御する代理オブジェクト

振る舞いパターン(Behavioral Patterns)— 11つ

オブジェクト間の通信と責任分担に関するパターンです。

パターン一言説明
Chain of Responsibility処理を連鎖的に委譲する
Command操作をオブジェクトとして表現する
Iterator要素を順番にアクセスする
Mediatorオブジェクト間の通信を仲介する
Memento状態を保存・復元する
Observer状態変化を通知する
State状態に応じて振る舞いを変える
Strategyアルゴリズムを交換可能にする
Template Method処理の骨格を定義し、詳細をサブクラスに委ねる
Visitorデータ構造と処理を分離する
Interpreter文法を定義し解釈する

パターンの構造を読むコツ

各パターンは以下の要素で説明されます。

要素説明
名前パターンの識別名(共通語彙)
目的どんな問題を解決するか
動機なぜこのパターンが必要か
構造クラス図やオブジェクト図
参加者登場するクラスやインターフェース
適用可能性いつ使うべきか
結果メリットとデメリット

パターンを使う際の注意

高橋アーキテクトのアドバイス:

「パターンを学ぶと、何でもパターンで解決したくなる。これを”ゴールデンハンマー症候群”と呼ぶ。パターンは目的ではなく手段だ。問題があって初めてパターンを適用する。パターンを使いたいがために問題を作ってはいけない」

やるべきことやってはいけないこと
問題を分析してからパターンを選ぶパターンありきで設計する
チームで語彙として共有するパターン名でマウントを取る
必要に応じてパターンを組み合わせる23パターン全部を1つのプロジェクトで使う
シンプルな解決策で十分なら使わない単純な問題を過剰に抽象化する

まとめ

ポイント内容
GoFデザインパターン繰り返し使われる設計の型を体系化したもの
3つの分類生成・構造・振る舞い
学ぶ意義共通語彙、再利用、SOLID の具体例
注意点手段であり目的ではない

チェックリスト

  • デザインパターンの歴史と目的を理解した
  • 3つの分類(生成・構造・振る舞い)を把握した
  • パターンを使う際の注意点を理解した

次のステップへ

次から具体的なパターンを学んでいきます。まずは生成パターンの Factory Method と Abstract Factory からです。


推定読了時間: 25分