B-Teck!

お仕事からゲームまで幅広く

【デザインパターン】デザインパターンの勉強中メモ 生成に関するパターン

AbstractFactory

Factory Methodの概念の進化系という感じ。
Factory MethodがスーパークラスのメソッドとしてFactoryを定義するのに対して、
AbstractFactoryではFactoryを束ねたクラスを作成する。

1つの処理に関連するクラス群のFactoryを束ね、抽象化することで、
処理の単位でクラスを置き換える事ができる。

Builder

オブジェクトの生成に準備と特定の手順が必要な場合、
コンストラクタのみで記述するには責任範囲が広くなってしまうので、
準備するクラスをBuilderクラス、手順を定義するクラスをDirectorクラスとして分割して定義する。
Builder・Directorそれぞれに利用するためのインターフェースを用意することで、
様々な組み合わせを同じ手順で実行することができる。

FactoryMethod

オブジェクトの生成をサブクラスに任せることで、
生成するインスタンスを選択できるようにするパターン。

スーパークラスで定義された処理をサブクラスで生成したオブジェクトで行う場合や、
特定のスーパークラスを持ったオブジェクトを生成する手順を複数提供したい場合に利用する。

Prototype

あるオブジェクトを生成するために必要な手順がある時、
すでに手順を実行して生成されたインスタンスを用意し、
そのインスタンスを複製可能な実装にする。

次に同じオブジェクトを利用したい場合は複製して使うことで、
生成の手順をスキップできる。

Singleton

あるオブジェクトについて、インスタンスが1つのみであることを保証するパターン。

複数のインスタンスを生成したくないオブジェクトが存在した時、
インスタンスの生成/呼び出しを行う共通のメソッドを作成し、
インスタンスが既に存在すれば生成済みのインスタンスを利用し、
存在しなければ新しいインスタンスを生成することで、
常に単一のインスタンスのみが存在する状態を保つ。