JSON

GoFデザインパターン - JSON

GoFデザインパターンは、1994年にErich Gamma、Richard Helm、Ralph Johnson、John Vlissidesの4人(通称「Gang of Four」)によって著された『Design Patterns: Elements of Reusable Object-Oriented Software』で提唱された、オブジェクト指向ソフトウェア設計における23の再利用可能な解決策です。生成パターン、構造パターン、振る舞いパターンの3カテゴリに分類され、ソフトウェアの再利用性、保守性、拡張性を向上させるために広く使用されています。

デザインパターン GoF オブジェクト指向 ソフトウェア設計 プログラミング
[
  {
    "code": "C01",
    "slug": "factory-method",
    "name": "ファクトリーメソッド",
    "description": "オブジェクト生成のインターフェースを定義し、具体的なクラスはサブクラスに決定させます。",
    "category": "生成パターン"
  },
  {
    "code": "C02",
    "slug": "abstract-factory",
    "name": "抽象ファクトリ",
    "description": "関連するオブジェクト群を具体的なクラスを指定せずに生成するインターフェースを提供します。",
    "category": "生成パターン"
  },
  {
    "code": "C03",
    "slug": "singleton",
    "name": "シングルトン",
    "description": "クラスのインスタンスを1つだけに制限し、グローバルなアクセスポイントを提供します。",
    "category": "生成パターン"
  },
  {
    "code": "C04",
    "slug": "prototype",
    "name": "プロトタイプ",
    "description": "既存のオブジェクトをコピーして新しいオブジェクトを生成します。",
    "category": "生成パターン"
  },
  {
    "code": "C05",
    "slug": "builder",
    "name": "ビルダー",
    "description": "複雑なオブジェクトを段階的に構築し、構築と表現を分離します。",
    "category": "生成パターン"
  },
  {
    "code": "S01",
    "slug": "adapter",
    "name": "アダプター",
    "description": "互換性のないインターフェースを持つクラス同士を連携させます。",
    "category": "構造パターン"
  },
  {
    "code": "S02",
    "slug": "bridge",
    "name": "ブリッジ",
    "description": "抽象部分と実装部分を分離し、それぞれを独立して変更可能にします。",
    "category": "構造パターン"
  },
  {
    "code": "S03",
    "slug": "composite",
    "name": "コンポジット",
    "description": "ツリー構造でオブジェクトを表現し、個別とグループを同一視します。",
    "category": "構造パターン"
  },
  {
    "code": "S04",
    "slug": "decorator",
    "name": "デコレーター",
    "description": "既存オブジェクトに新しい機能を動的に追加します。",
    "category": "構造パターン"
  },
  {
    "code": "S05",
    "slug": "facade",
    "name": "ファサード",
    "description": "複雑なサブシステムに対して簡素化されたインターフェースを提供します。",
    "category": "構造パターン"
  },
  {
    "code": "S06",
    "slug": "flyweight",
    "name": "フライウェイト",
    "description": "共有可能なインスタンスを共有し、メモリ使用量を削減します。",
    "category": "構造パターン"
  },
  {
    "code": "S07",
    "slug": "proxy",
    "name": "プロキシ",
    "description": "別オブジェクトへのアクセスを制御する代理オブジェクトを提供します。",
    "category": "構造パターン"
  },
  {
    "code": "B01",
    "slug": "chain-of-responsibility",
    "name": "責任の連鎖",
    "description": "リクエストを複数のハンドラに連鎖的に渡し、処理できるハンドラが処理します。",
    "category": "振る舞いパターン"
  },
  {
    "code": "B02",
    "slug": "command",
    "name": "コマンド",
    "description": "リクエストをオブジェクトとしてカプセル化し、送信者と受信者を分離します。",
    "category": "振る舞いパターン"
  },
  {
    "code": "B03",
    "slug": "interpreter",
    "name": "インタープリター",
    "description": "特定の言語の文法を解析し、式を解釈・評価します。",
    "category": "振る舞いパターン"
  },
  {
    "code": "B04",
    "slug": "iterator",
    "name": "イテレーター",
    "description": "集合体内の要素に順番にアクセスする方法を提供します。",
    "category": "振る舞いパターン"
  },
  {
    "code": "B05",
    "slug": "mediator",
    "name": "メディエーター",
    "description": "オブジェクト間の通信を中央の媒介者で管理し、依存関係を削減します。",
    "category": "振る舞いパターン"
  },
  {
    "code": "B06",
    "slug": "memento",
    "name": "メメント",
    "description": "オブジェクトの状態を保存し、後で復元可能にします。",
    "category": "振る舞いパターン"
  },
  {
    "code": "B07",
    "slug": "observer",
    "name": "オブザーバー",
    "description": "状態変更時に依存オブジェクトに自動的に通知します。",
    "category": "振る舞いパターン"
  },
  {
    "code": "B08",
    "slug": "state",
    "name": "ステート",
    "description": "状態に応じてオブジェクトの振る舞いを動的に変更します。",
    "category": "振る舞いパターン"
  },
  {
    "code": "B09",
    "slug": "strategy",
    "name": "ストラテジー",
    "description": "アルゴリズムをカプセル化し、実行時に選択可能にします。",
    "category": "振る舞いパターン"
  },
  {
    "code": "B10",
    "slug": "template-method",
    "name": "テンプレートメソッド",
    "description": "処理の枠組みを定義し、詳細をサブクラスに委任します。",
    "category": "振る舞いパターン"
  },
  {
    "code": "B11",
    "slug": "visitor",
    "name": "ビジター",
    "description": "オブジェクト構造を変更せずに新しい操作を追加します。",
    "category": "振る舞いパターン"
  }
]