
Javaでの開発において、デザインパターンは「再利用可能で保守しやすいコード」を実現するための設計手法として非常に有用です。しかし、全23種類ある「GoF(Gang of Four)」のデザインパターンの中には、実務で頻繁に使われるものもあれば、理論的には優れているが実務では出番の少ないものも存在します。この記事では、それらの違いを明確にし、学習や設計の判断に役立つ情報を提供します。
○実務でよく利用されるデザインパターン
以下のパターンは、現場での使用頻度が高く、フレームワークやライブラリ(例:Spring、Java標準API)とも親和性が高いため、必ず学習すべき重要パターンです。
パターン名 | 分類 | 主な用途 | 実務での活用例 | 学習重要度 |
---|---|---|---|---|
Singleton | 生成 | インスタンス1つだけ保持 | 設定管理、ログ、SpringのBean | ★★★★★ |
Factory Method | 生成 | オブジェクトの生成を分離 | DIコンテナ、設定に応じた生成処理 | ★★★★★ |
Builder | 生成 | 複雑なオブジェクト生成 | DTOや設定クラスの生成 | ★★★★☆ |
Strategy | 行動 | 処理の切り替え | 決済手段、ログ出力方法の選択 | ★★★★★ |
Observer | 行動 | 状態変化の通知 | イベント通知、画面更新 | ★★★★★ |
Decorator | 構造 | 機能の追加 | 認証機能、ログ機能の動的追加 | ★★★★★ |
Adapter | 構造 | インターフェース変換 | 旧APIと新APIの統合、互換処理 | ★★★★★ |
Facade | 構造 | 複雑な処理の単純化 | 複数サービスの統合 | ★★★★★ |
Command | 行動 | 処理のカプセル化 | リクエスト処理、Undo/Redo | ★★★★☆ |
Chain of Responsibility | 行動 | 責任の分散 | Webフィルター、イベントハンドラ | ★★★★☆ |
Template Method | 行動 | 処理の枠組み提供 | JDBCテンプレート、共通処理の抽象化 | ★★★★☆ |
Composite | 構造 | 木構造の表現 | メニュー構造、UIコンポーネント | ★★★★☆ |
Iterator | 行動 | 集合の巡回 | JavaコレクションAPI | ★★★★☆ |
State | 行動 | 状態による振る舞い変更 | ワークフロー、ステータスマシン | ★★★★☆ |
❌ 実務であまり使われないデザインパターン
次のパターンは、ニッチな要件や大型システムに限定されがちで、通常の業務アプリ開発では使われにくいため、学習の優先度はやや低めです。
パターン名 | 分類 | 出番が少ない理由 | 学習重要度 |
---|---|---|---|
Prototype | 生成 | clone() が非推奨気味、Builderで代替可 | ★★☆☆☆ |
Abstract Factory | 生成 | 拡張性は高いが設計が複雑化しやすい | ★★★☆☆ |
Bridge | 構造 | 実装と抽象の分離は高度設計向け | ★★☆☆☆ |
Flyweight | 構造 | メモリ最適化のニッチなケース向け | ★★☆☆☆ |
Proxy | 構造 | 特定技術(AOP、RMIなど)でのみ活躍 | ★★★☆☆ |
Interpreter | 行動 | DSL設計など特殊用途に限定される | ★☆☆☆☆ |
Mediator | 行動 | コンポーネント依存の集中により肥大化しやすい | ★★☆☆☆ |
Memento | 行動 | Undo/Redo用途以外ではあまり使わない | ★★☆☆☆ |
Visitor | 行動 | 要素の追加に弱く、構造が複雑化しやすい | ★★☆☆☆ |
🎓 学習のステップガイド
ステップ | 推奨パターン | 解説 |
---|---|---|
STEP 1 基礎 | Singleton, Factory Method, Strategy, Observer | Javaの基本構造やフレームワーク理解に直結 |
STEP 2 中級 | Decorator, Adapter, Builder, Template Method, Facade | 保守性・拡張性に強い設計が可能に |
STEP 3 応用 | Command, State, Chain of Responsibility, Composite | 状況に応じて使い分けられると設計力が飛躍的に向上 |
STEP 4 研究用 | Visitor, Interpreter, Memento, Bridge など | 大規模・特殊システム向け、理解の幅を広げる段階 |
まとめ
全23種類あるGoFパターンのうち、実務で特によく使われるのは約13〜14個です。よく使われるパターンは、「オブジェクト生成の制御」「アルゴリズムの切り替え」「機能の分離と拡張」など、現場での設計課題を直接解決するものです。
あまり使われないパターンも、アーキテクトやライブラリ開発者には有用で、システム規模が大きくなると必要になることもあります。
どのパターンから学習していけばいいか迷った人は、まずは学習重要度が★★★★★のパターンから学習してみてはいかがでしょうか。
デザインパターン講座 目次
第1章 導入
- 1.1. デザインパターンって何?
- 1.2. 実務で本当に使うJavaデザインパターンはどれ?
第2章 オブジェクトの「生成」に関するパターン
- 2.1. Abstract Factory
- 2.2. Builder
- 2.3. Factory Method
- 2.4. Prototype
- 2.5. Singleton
第3章 プログラムの「構造」に関するパターン
- 3.1. Adapter
- 3.2. Bridge
- 3.3. Composite
- 3.4. Decorator(Filter)
- 3.5. Facade
- 3.6. Flyweight
- 3.7. Proxy
第4章 オブジェクトの「振る舞い」に関するパターン
- 4.1. Chain of Responsibility
- 4.2. Command
- 4.3. Interpreter
- 4.4. Iterator
- 4.5. Mediator
- 4.6. Memento
- 4.7. Observer
- 4.8. State
- 4.9. Strategy
- 4.10. Template Method
- 4.11. Visitor