##概要
生成すべきオブジェクトの種類を原型となるインスタンスを使って明確にし、それをコピーすることで新たなオブジェクトの生成を行うパターン
以下の4種類のクラスからなる
- Prototypeクラス(複製のためのインターフェイスを宣言)
- ConcretePrototypeクラス(1.のオペレーションを実装)
- Clientクラス(2.に複製を依頼して新たなオブジェクトを生成する)
##具体例と実装
デザインカタログ作成を例にすると
上記1~3はそれぞれ
- 素材集クラス
- デザイン素材集クラス
- デザインカタログ生成クラス
が対応する。
コードの詳細は以下
clipart.rb
class Clipart
def initialize
end
def clone
end
end
design_clipart.rb
class DesignClipart < Clipart
def initialize
end
def clone
# デザイン素材のコピーを作成
end
end
design_catalog_creator.rb
prototype = DesignClipart.new
design_sample = prototype.clone
# design_sampleを使ってカタログを作成
##メリット
- 生成するオブジェクトの追加や削除を実行時に行える
- パラメタ、構造を変えることでオブジェクトの仕様を変更できる
- アプリケーションのクラス構成を動的に決められる
##まとめ
オブジェクトの生成を動的に行い、システム全体で必要になるクラス数を減らすことの出来るパターン
インスタンス化を行う具現化クラスを隠蔽しているためClientオブジェクトを修正せずに特定のアプリケーション向けのクラスと協調させることが出来る