読者です 読者をやめる 読者になる 読者になる

プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

6.Prototype コピーしてインスタンスを作る

1つずつnewすると大変な場合にインスタンスを複製して新しいインスタンスを作りたい。

newでインスタンスを作成する場合はクラス名を指定する必要がある。
しかし、インスタンスからコピーしてしまえばクラス名を知らずとも新しいインスタンスを作成できる。

f:id:p-monster:20121218195101p:plain

Prototype・・・コピーして新しいインスタンスを作るためのAPI
ConcretePrototype・・・Prototypeの実装
Client・・・Prototypeのメソッドを利用して新しいインスタンスを作る

Prototypeはコピー機。
ConcretePrototypeのインスタンスを格納し、具体的な名前を知らなくてもそれを複製できる。

ソースの中に利用するクラスの名前が書かれていると、そのクラスと切り離して再利用できなくなる。
Prototypeパターンを使えばクラス名や実装を知らなくてもインスタンスが作れる。

関連しているパターン

Flyweight・・・Prototypeはある状態のインスタンスのコピーを作る。Flyweightは1つのインスタンスを複数の場所で共有して利用する
Memento・・・スナップショットとアンドゥを行うために現在の状態を保存
CompositeおよびDecorator・・・再帰的な構造を表すため複雑になりがち。Prototypeパターンを使うかもしれない
Command・・・命令を複製したい場合にPrototypeパターンを使うかもしれない

参考:

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門