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

Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

第4回 生成に関するパターン Prototype

スポンサードリンク

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