デザインパターンは、オブジェクト指向設計でよく現れる問題への典型的な解決策のカタログ。GoF(Gang of Four)の 『デザインパターン』(1994)が23種類を整理したことで広く知られるようになった。
いずれも SOLID原則 などの設計原則を、具体的なクラス構造として実装したものと見なせる。 たとえば Strategy は OCP を、依存性注入 は DIP を実現する手段になっている。
| 分類 | 説明 | 代表例 🧩 |
|---|---|---|
| 生成に関するパターン | オブジェクトの生成方法に関するパターン | Singleton, Factory Method, Builder, Prototype |
| 構造に関するパターン | オブジェクトやクラスの構造(組み立て方)に関するパターン | Adapter, Decorator, Composite, Facade |
| 振る舞いに関するパターン | オブジェクト間のやり取り・責務の分配方法に関するパターン | Observer, Strategy, State, Command, Iterator |
現代における位置づけ¶
GoFパターンが提案された当時(C++や初期のJavaが主流)と比べ、今日の言語は高階関数・ラムダ・ジェネリクス・ミックスインなど 表現力の高い機能を備えているため、一部のパターンは言語機能で代替できるようになっている。
言語機能で不要になりがちなもの:Iterator(多くの言語がネイティブに反復子を持つ)、Strategy の一部(関数を直接渡せば済む場合も多い)
今も現役なもの:依存性注入、Observer(イベント駆動UIやPub/Subの基礎)、Adapter/Facade(外部ライブラリとの境界)
パターンを適用すること自体を目的化せず、「この構造が今のコードの複雑さを本当に減らすか」を基準に選ぶとよい。