🐈

GoFのデザインパターンの説明が何回聞いても頭に入らないので簡潔な説明を試みる

2024/01/03に公開

括弧内もしくは単独の英単語はオフィシャルの説明で出てくる構成要素の同名の単語を示す。

生成に関するパターン (Creational Patterns)

生成するオブジェクトの作り分け

オブジェクトを生成する専門のメソッドを用意して、それをoverrideすることよって生成クラスを交換する。
下記の2種はその交換単位とオブジェクトの利用者が違う。

  • Abstract Factory : クラス全体がabstractfactory であり複数のメソッドを持ちそれぞれ別のオブジェクトを返す。オブジェクトを作るだけに専念しており、利用することはない。
  • Factory Method : 基底クラスが内部で使う某オブジェクトを直接でなくfactory method 経由で生成する。

複雑なオブジェクト構築のための手段

  • Builder: 複雑なオブジェクトの構築を細分化(builder.method)してproducerの制御により段階的に行う。
  • Prototype: 既存のオブジェクトをコピーして新しいオブジェクトを生成する。オブジェクトの作成が複雑かつ内容に個体差が少ない場合を想定。

オブジェクトの運用に関して

  • Singleton: クラスのオブジェクトが1つだけであることを保証する。このオブジェクトへのアクセスは事実上グローバルに提供される。

構造に関するパターン (Structural Patterns)

  • Composite: 木構造のオブジェクト群を、一貫して扱えるための機構。

  • Flyweight: 小さなオブジェクト(flyweight)を大量に使用する時、オブジェクト作成のコストを減らす。 不変の状態(intrinsic)を共有し、変更可能な状態(extrinsic)は個別に扱う。

  • Proxy: あるオブジェクトへの入出力に干渉する代理(proxy)オブジェクト。

元のオブジェクトに別のオブジェクトを被せて拡張する

  • Adapter: 異なるインターフェースを持つクラスを互換性を持たせるために使用。機能の変更は含まない。
  • Bridge: 機能要求から実装を分離する。とはこの間の接続をする有様。
  • Decorator: 既存のオブジェクトに動的に新しい機能を追加する。
  • Facade: 複雑なサブシステムのインターフェースを統合する。

振る舞いに関するパターン (Behavioral Patterns)

  • Chain of Responsibility : 幾つかのhandlerから適切な処理を選択する仕掛け。clientは登録されたhandler群を順に呼び出し、適切に処理できた場合は巡回を中断してそので結果を返す。
  • Command : clientがcommandを作る。command自体にはreceiver.method を選択する役目のみを持つ。 commandに対する起動をinvokerと呼ぶ。
  • Interpreter : 何某かの処理手順を表す木構造のオブジェクト群に、直接処理メソッド(.interpreter)を持たせる。
  • Iterator : 順列データの順次送り出し機構。新しいデータを入れることはない。元データの操作をすることもない。
  • Mediator : 複数の対応オブジェクト(Colleagues)群を協調動作させる。
  • Memento :オブジェクト(originator)の内部状態を形式mementoにて外部オブジェクト(caretaker)に保存&書き戻しをする。
  • Observer: あるオブジェクトの変化を外部オブジェクトに通知するための機構。
  • State: 内部値の変化によって自律的に処理を切り替える。
  • Strategy : 外部指示によって処理を切り替える。
  • Template Method : 一連の処理を細分化methodして、継承により交換可能にする。処理の手順の呼び出し順序は変更しない。 クラス内部で完結する。

Discussion