🎨

デザインパターン

2023/09/10に公開

デザインパターンはソフトウェア設計において非常に重要な概念です。
デザインパターンは、特定の問題を解決するための再利用可能なソリューションです。
これらのパターンは、多くのアプリケーションやシステムで繰り返し発生する設計の問題を効果的に対処するために使用されます。

デザインパターンは大きく3つのカテゴリに分けられます:

  1. 生成パターン (Creational Patterns)

    オブジェクトの生成方法に関連するパターン。

    1. Singleton
      • あるクラスのインスタンスが1つだけ存在することを保証する。
    2. Factory Method
      • インスタンスの作成をサブクラスに委譲する。
    3. Abstract Factory
      • 複数のファクトリメソッドを持つインターフェースを提供する。
    4. Builder
      • オブジェクトの構築プロセスを分離して、異なる種類のオブジェクトを生成する。
    5. Prototype
      • 既存のオブジェクトをコピーして新しいオブジェクトを作成する。
  2. 構造パターン (Structural Patterns)

    オブジェクト間の関係を構築するためのパターン。

    1. Adapter
      • 既存のクラスのインターフェースを変更して、別のインターフェースを提供する。
    2. Bridge
      • 実装と抽象を分離して、それらが独立して変更できるようにする。
    3. Composite
      • オブジェクトを木構造で構築し、個々のオブジェクトとその組み合わせを統一的に扱う。
    4. Decorator
      • オブジェクトに動的に新しい機能を追加する。Pythonのデコレータはこの考え方に基づいています。
    5. Facade
      • 複数のサブシステムのインターフェースを統一した単一のインターフェースを提供する。
    6. Flyweight
      • 大量の似たようなオブジェクトを効率的に共有して使用する。
    7. Proxy
      • 他のオブジェクトへのアクセスを制御するための代理オブジェクト。
  3. 振る舞いパターン (Behavioral Patterns)

    オブジェクト間の通信方法に関連するパターン。

    1. Chain of Responsibility
      • リクエストをオブジェクトの連鎖を通して処理する。
    2. Command
      • リクエストをオブジェクトとしてカプセル化し、遅延実行やキュー、ログ取りをサポートする。
    3. Interpreter
      • 与えられた言語の文法を表現するための表現ツリーを解釈する。
    4. Iterator
      • 集合体の要素を逐次的にアクセスする方法を提供する。Pythonのイテレータとジェネレータはこの考え方に基づいています。
    5. Mediator
      • オブジェクト間の通信を仲介するオブジェクトを提供して、直接の参照を防ぐ。
    6. Memento
      • オブジェクトの内部状態をキャプチャし、後でこの状態に復元することを可能にする。
    7. Observer
      • あるオブジェクトの状態変化を他のオブジェクトに通知する。Pythonのリストや辞書のような組み込み型はこの機能を持っていませんが、カスタム実装は可能です。
    8. State
      • オブジェクトの内部状態に応じて、その振る舞いを変更する。
    9. Strategy
      • 実行時にアルゴリズムを選択する。
    10. Template Method
      • アルゴリズムの構造を定義し、一部のステップをサブクラスに委譲する。
    11. Visitor
      • オブジェクト構造の要素に対する新しい操作を追加することなく、その要素のクラスを変更する。

Discussion