デザインパターン

ソフトウェア設計で繰り返し現れる問題に対する再利用可能な解決策のカタログ

設計設計パターン
デザインパターン」の技術書を見る (52 冊) →

デザインパターンとは

デザインパターンは、GoF (Gang of Four) が 1994 年に「Design Patterns」で体系化した、ソフトウェア設計で繰り返し現れる問題に対する再利用可能な解決策のカタログである。23 のパターンが 3 カテゴリに分類される。

3 つのカテゴリ

3 つのカテゴリを以下にまとめる。

カテゴリ目的代表的なパターン
生成 (Creational)オブジェクトの生成方法Factory, Builder, Singleton
構造 (Structural)オブジェクトの構成Adapter, Proxy, Decorator
振る舞い (Behavioral)オブジェクト間の連携Observer, Strategy, Iterator

現代の開発でよく使うパターン

現代の開発でよく使うパターンを以下にまとめる。

パターン用途TypeScript での例
Strategyアルゴリズムの切り替え認証方式の切り替え
Observerイベント通知EventEmitter, React状態管理
Factoryオブジェクト生成の抽象化DB クライアントの生成
Builder複雑なオブジェクトの段階的構築クエリビルダー
Adapterインターフェースの変換外部 API のラッパー
Decorator機能の動的追加ログ、キャッシュの追加

Strategy パターン

Strategy パターンのコード例を示す。

interface PaymentStrategy {
  pay(amount: number): Promise<void>;
}

class CreditCardPayment implements PaymentStrategy {
  async pay(amount: number) { /* クレジットカード決済 */ }
}

class BankTransferPayment implements PaymentStrategy {
  async pay(amount: number) { /* 銀行振込 */ }
}

// 実行時に戦略を切り替え
async function processPayment(strategy: PaymentStrategy, amount: number) {
  await strategy.pay(amount);
}

AWS でのパターン

AWS でのパターンを以下にまとめる。

パターンAWS での実装
ObserverSNS (Pub/Sub), EventBridge
StrategyLambda の環境変数で処理を切り替え
AdapterLambda が外部 API を DynamoDB 形式に変換
ProxyAPI Gateway (認証、スロットリング)

パターンの過剰適用に注意

パターンは問題を解決するためのツールであり、全てのコードにパターンを適用する必要はない。YAGNI 原則に従い、必要になってから適用する。

❌ 「Factory パターンを使おう」→ 生成するクラスが 1 つしかない
✅ 「生成するクラスが 3 種類に増えた」→ Factory パターンを導入

体系的に学ぶなら関連書籍を参照してほしい。

この記事は役に立ちましたか?

関連用語

関連する記事