Prototype は、 生成に関するデザインパターンの一つで、 特定のクラスに結合することなく、 オブジェクト (たとえ複雑なオブジェクトでも) のクローン作成を可能とします。
プロトタイプのクラス全部には、 共通するインターフェースが必要です。 これにより、 具象クラスが不明であってもオブジェクトを複製することが可能となります。 プロトタイプ・オブジェクトが、 完全なコピーを生成できるのは、 同じクラスのオブジェクト同士が非公開フィールドを互いにアクセスできるからです。
複雑度:
人気度:
使用例: Prototype パターンは、 Java では、 Cloneable
インターフェースを使って、 初めから利用可能です。
このインターフェースを実装するクラスはどれもクローン作成可能です。
見つけ方: このパターンは、 clone
や copy
といったメソッドで容易に識別可能です。
図形のコピー
標準の Cloneable
インターフェースを使わずに、 どうやって Prototype を実装できるかを見ていきましょう。
shapes: 図形リスト
shapes/Shape.java: 共通図形インターフェース
shapes/Circle.java: 単純な図形
shapes/Rectangle.java: 別の図形
Demo.java: クローン作成例
OutputDemo.txt: 実行結果
プロトタイプ・レジストリー
定義済みのプロトタイプ・オブジェクトを集めた、 集中型プロトタイプ・レジストリー (ファクトリーとも) を実装することもできます。 こうすると、 名前や他のパラメーターを元に、 ファクトリーから新規オブジェクトを取得できます。 ファクトリーは適切なプロトタイプを探し出し、 そのクローンを作成して、 返します。
cache
cache/BundledShapeCache.java: プロトタイプ・ファクトリー
Demo.java: クローン作成例
OutputDemo.txt: 実行結果