ホーム › デザインパターン
デザインパターン
GoF(Gang of Four)デザインパターンの Java 実装サンプル集です。 実務でよく使われるパターンを中心に、Java 8 / 17 / 21 のバージョン別コードで解説します。
DP-02: Builder パターン
コンストラクタの引数が多くなる「テレスコーピング問題」を解決するパターン。HttpRequest や EmailMessage の実装例で名前付き・段階的なオブジェクト構築を学びます。
DP-03: Factory Method パターン
オブジェクトの生成処理をサブクラスに委譲するパターン。Report(PDF / HTML / CSV)の生成例で、依存性の逆転と拡張性を学びます。
DP-05: Singleton パターン
インスタンスを1つだけ生成し、グローバルアクセスポイントを提供するパターン。スレッドセーフな実装(ダブルチェックロッキング・enum Singleton)を Java 8 / 17 / 21 で比較します。
DP-06: Adapter パターン
既存クラスを変更せず新しいインターフェースに適合させるパターン。java.io.InputStreamReader(InputStream → Reader 変換)が代表例です。
DP-08: Composite パターン
単一オブジェクトと複合オブジェクトを同じインターフェースで扱うパターン。ファイルとディレクトリをツリー構造で統一的に操作する例で解説します。
DP-09: Decorator パターン
継承ではなく委譲で機能を動的に追加するパターン。BufferedInputStream や GZIPOutputStream など java.io の設計に多用されています。
DP-10: Facade パターン
複雑なサブシステムをシンプルな窓口で隠蔽するパターン。メール送信(認証・テンプレート・SMTP・ログ)を1メソッドに統合する例で解説します。
DP-12: Proxy パターン
オブジェクトへのアクセスを制御する代理人パターン。仮想プロキシ(遅延ロード)と保護プロキシ(アクセス制御)を Java 8 / 17 / 21 で実装します。
DP-13: Chain of Responsibility パターン
リクエストを処理できるハンドラーが見つかるまでチェーンに沿って渡すパターン。ログレベルフィルタリングチェーンで Servlet フィルターの仕組みを理解します。
DP-14: Command パターン
操作をオブジェクト化して Undo/Redo・キューイングを可能にするパターン。テキストエディタの挿入・削除操作を例に、履歴管理の仕組みを解説します。
DP-16: Iterator パターン
コレクションの内部構造を隠してアクセスを統一するパターン。Iterable を実装して for-each ループを使えるカスタムコレクションを作ります。
DP-19: Observer パターン
状態変化を複数のオブザーバーに通知するパターン。イベントリスナーの仕組みを実装から理解します。java.util.Observer は Java 9+ で非推奨になりました。
DP-20: State パターン
状態に応じて振る舞いを変えるパターン。自動販売機(IDLE→COIN_INSERTED→DISPENSING)の例で、if-else による状態管理の問題点と解決策を学びます。
DP-21: Strategy パターン
アルゴリズムをオブジェクト化して実行時に切り替えるパターン。java.util.Comparator はまさに Strategy パターンの実装です。
DP-22: Template Method パターン
アルゴリズムの骨組みをスーパークラスで定義し、具体処理をサブクラスに委譲するパターン。HttpServlet の doGet()/doPost() が代表例です。