NO IMAGE

こんにちわ。ぼんじりです。

 

今日は日中吹雪いてましたね。

最近やけに寒い気がします。

 

誰からも共感を得たことはありませんが、寒いとキュンキュンしますよね。

 

今回はデザインパターンの第6回Protptypeについてまとめてみます。

 

前回(第5回Singleton)に続きインスタンスのお話。

 

Singletonはただ一つのインスタンスをつくるデザインパターンだったが、

Prototypeはコピーしてインスタンスをつくるよう。

 

Prototype(原型)を作り、それを保存しておくことでインスタンスのコピーが作れますよ、だそうです。

 

メリットとして、

①扱うオブジェクトの種類が多すぎてクラスにまとめられない場合

②グラフィックエディタなど、ユーザの操作で作られるインスタンスを再生成したい場合

③インスタンスを生成するフレームワークを、特定のクラスに依存させたくない場合

Prototypeデザインと用いると便利になります。

 

<登場人物>

 ○Prototype(原型)の役

  複製する・・・インスタンスをコピーして、新しいインスタンスを作る

  操作する

  などのメソッドを定めているスーパークラス

   <例>

    乗り物クラス

     ・(???)を複製

     ・(???)を操作

 

 ○ConcreatePrototype(具体的な原型)の役

  Prototypeを継承する具体的な原型

   <例>

    (乗り物クラスを継承した)飛行機クラス

     ・(飛行機)を複製

     ・(飛行機)を操作

    (乗り物クラスを継承した)電車クラス

     ・(電車)を複製

     ・(電車)を操作

 

 ○Auther(作成者)の役

  Prototypeの複製メソッド利用して新しいインスタンスを作る役

  Protptypeを保存しておくことができる。

   <例>

    作成者クラス

     ・原型保存ボックス(飛行機、電車)

     ・((飛行機)を複製)する

     ・((電車)を複製)する

 

こんなようなイメージでしょうか。

 

Java言語でPrototypeパターンを扱うときの注意点として

コピー対象となるクラスはjava.lang.Coloneableインターフェースを実装する必要があるそうです。

そうしないとCloneメソッドを呼び出すことができないので注意しなければなりません。

さらにCloneメソッドは浅いコピー(shallow copy)が行われるようで、

例えば配列の場合、参照がコピーされるだけであって一つ一つの要素はコピーされないようです。

もし、要素をコピーしたいときは複製メソッドに処理を書かなければなりません。

忘れそうなので要注意ですね。

 

また。