Design Patterns 第4回 生成に関するパターン Prototype
前回のリンク
生成に関するパターン
Prototype
Prototypeパターンは生成されるオブジェクトの型が、新しいオブジェクトの複製として生成されるプロトタイプのインスタンスによって決定されるソフトウェア開発で使われる。例えば、このパターンは標準的な方法(例:newキーワードを使うなど)によって新しいオブジェクトを生成する本来のコストはそれが適用されたアプリケーションにとってかなり高くつく。
実装
純粋仮想関数のclone()が記述されている抽象基底クラスを宣言する。「ポリモーフィックなコンストラクタ」の性質を必要とするどのクラスもそれ自身が、抽象基底クラスから派生し、clone()の振る舞いを実装する。
ここでクライアントコードはまずファクトリーメソッドを呼ぶ。このファクトリーメソッドはパラメータによって、具象クラスを見つける。この具象クラスで、clone()関数はファクトリーメソッドにより呼ばれ、ファクトリーメソッドによりそのオブジェクトが返される。
- これはPrototypeの実装のサンプルのコードで、ここにすべての構成部品の詳細な記述をしておく。
・Recordクラスは純粋仮想関数のclone()を持つ純粋仮想クラス。 ・Recordクラスの具体的な実装としてCarRecord, BikeRecord, PersonRecordがある。 ・Recordクラスの具体的な各実装の1対1のマッピングとしてenum RECORD_TYPE_enを定義している。 RecordFactoryクラスはCreateRecord(...)というファクトリーメソッドを持つ。このメソッドは enum RECORD_TYPE_enをパラメータとして必要とし、 Recordクラスの具体的な実装を返すパラメータに依存している。
実行結果
$ ./prototype.exe Car Record Name : Ferrari Number : 5050 Bike Record Name : Yamaha Number : 2525 Person Record Name : Tom Age : 25