開発
Prototypeパターン
makuta
通常Javaで、あるクラスのインスタンスを作るときには、
new クラス名();
のように、newを使って、クラス名を指定することでインスタンスを生成します。このように、newでインスタンスを作るときは必ずクラス名を指定なければなりません。しかし、
- オブジェクトの種類が多すぎて一つのクラスにまとめられない
- 生成させたいインスタンスが複雑な過程を経て作られるもので、クラスから作るのが難しい
- インスタンスを生成するときのフレームワークを特定のクラスに依存しないようにして作りたい
これらのようなときには、クラス名を指定せずにインスタンスを生成したくなります。
そんな時に使うデザインパターンが、Prototypeパターンです。Prototypeとは、「試作品」や「原型」などの意味です。
Prototypeパターンは、既に存在するインスタンスをコピーすることで新しいインスタンスを生成するためのパターンです。
newによる初期化は属性値まで初期値に戻ってしまいます。オブジェクトの複製を作るということは、今現在のインスタンスをまるごとコピーして返してくれるということです。
Prototypeパターンの目的はGoFでは次のように定義されています。
生成すべきオブジェクトの種類の原型となるインスタンスを使って明確にし、それをコピーすることで新たなオブジェクトの生成を行う。
このPrototypeパターンは
- 既存のインスタンスの状態を変更したくない
- 既存のインスタンスの構造とデータをそのまま新しいインスタンスに継承したい(クローン)
- クローン操作をカプセル化したい
といったときに、このパターンは効果を発揮します。
ということで、今回は、インスタンスをコピーして新しいインスタンスを生成する時に使えるデザインパターンの、Prototypeパターンについてでした。