デザインパターン
よくある設計上の課題に対する“定番の解き方”をカタログ化したもの。再利用される設計の語彙として、設計の意図を短い名前で共有できます。
- 1.デザインパターンは、繰り返し現れる設計問題への定番解とその“名前”の集まりです。
- 2.GoF の23パターンは生成・構造・振る舞いの3系統に分かれ、Singleton や Strategy などが代表例です。
- 3.目的は意図の共有とコードの柔軟化ですが、不要な場面で使うと過剰設計になるため使いどころが重要です。
デザインパターンとは
設計をしていると、「設定オブジェクトを1つだけ共有したい」「生成処理を切り替えたい」「アルゴリズムを差し替えたい」といった似た問題に何度も出会います。デザインパターンは、こうした典型的な問題に対する実績ある解き方を名前付きでまとめたものです。
- 再利用されるのは“コード”ではなく“設計” — コピペできる部品ではなく、構造の考え方を借ります。
- 設計の語彙になる — 「ここは Strategy で」と一言で意図が伝わり、チームの会話が速くなります。
- 多くは1994年の書籍『Gang of Four(GoF)』が出発点 — 23個のパターンが体系化されました。
パターンは特定の言語に縛られない、設計の「定石」です。
GoF の3つの分類
GoF はパターンを目的別に3系統へ分けています。何を解決したいかで探す入口が決まります。
| 分類 | 何を扱うか | 代表パターン |
|---|---|---|
| 生成(Creational) | オブジェクトの作り方を柔軟にする | Factory Method、Singleton、Builder |
| 構造(Structural) | クラスやオブジェクトの組み立て方 | Adapter、Decorator、Facade |
| 振る舞い(Behavioral) | オブジェクト間のやり取り・責務分担 | Strategy、Observer、Iterator |
「生成=作る」「構造=つなぐ」「振る舞い=動かす」と覚えると分類を思い出しやすくなります。
代表的なパターン
実務で登場頻度の高い4つを押さえておくと、多くの設計が読み解けます。
| パターン | 系統 | ひとことで | 使いどころ |
|---|---|---|---|
| Singleton | 生成 | インスタンスを1つだけに限定し共有する | 設定・ロガー・接続プール |
| Factory Method | 生成 | 生成処理を専用の窓口に切り出す | 条件で作る型を切り替えたい |
| Strategy | 振る舞い | アルゴリズムを差し替え可能にする | 並び替え・課金・割引ロジック |
| Observer | 振る舞い | 状態変化を購読者へ自動通知する | UIイベント、Pub/Sub、通知 |
たとえば Strategy は、if の分岐で処理を切り替える代わりに、共通インターフェースを持つ複数の実装を外から差し込む形にします。
interface SortStrategy {
sort(data: number[]): number[];
}
class Sorter {
constructor(private strategy: SortStrategy) {}
run(data: number[]) {
return this.strategy.sort(data); // 中身を知らずに委譲する
}
}
Observer は、対象(Subject)が変化したときに登録済みの購読者へ通知する仕組みで、ブラウザの addEventListener もこの考え方の一例です。
使うときの注意
パターンは便利ですが、目的化すると逆効果です。設計を簡単にするための道具であって、使うこと自体がゴールではありません。
「将来必要かも」で何でもパターンに当てはめると、ただの代入が何層もの抽象に埋もれ、かえって読みにくくなります。まず素直に書き、変更が実際に痛くなってからパターンを導入するのが安全です。
「このパターンを使いたい」ではなく「この問題を解きたい」から入りましょう。Singleton はグローバル状態を生みテストを難しくするなど、各パターンには副作用もあります。利点と代償をセットで判断するのが上達のコツです。
まとめ
デザインパターンは、再利用される設計の語彙です。GoF の生成・構造・振る舞いという分類と、Singleton / Factory / Strategy / Observer といった定番を知っておくと、設計の意図を短い言葉で共有でき、コードの変更にも強くなります。一方で万能ではなく、問題が実在してから最小限に使うのが、過剰設計を避ける近道です。
プログラミング Article
デザインパターンを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
デザインパターン
比較で見る軸
難易度: intermediate / カテゴリ: プログラミング / タグ数: 3
導入後に効く点
GoF の23パターンは生成・構造・振る舞いの3系統に分かれ、Singleton や Strategy などが代表例です。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- intermediate
- カテゴリ
- プログラミング
- タグ数
- 3
判断チェックリスト
- 自社の用途が「デザインパターン / 設計」に近いか確認する。
- 強みである「デザインパターンは、繰り返し現れる設計問題への定番解とその“名前”の集まりです。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。