Prototypeパターン

newでインスタンスを生成するのではなく、cloneで登録済みのインスタンスから新しいインスタンスを複製するパターン。
FactoryMethodパターンと比べ、インスタンス生成用のクラス(Client)がひとつで済むというメリットがある。
逆にデメリットとして、ディープコピーが必要な場合、cloneメソッドを注意してオーバーライドする必要が出てくる。
生成するインスタンスのコンストラクタが呼び出されないという点にも注意しておかないと想定外の挙動を招く。
基本的にはFactoryMethodの方が優れているケースが多いが、以下の条件のいずれかに当てはまる場合は導入を検討してもよい。

  1. 生成するインスタンスの種類が多すぎて、Factory(ConcreteCreator)を大量に作りたくないケース。
  2. インスタンスの生成が複雑な過程を経るもので、クラスからの生成が難しい場合。
  3. フレームワークと生成するインスタンスを分けたい場合。

癖はあるが、適切な場所で使うと強力なパターン。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です