見出し画像

🛠️量産型プロトタイプパターンはオワコン?

cloneメソッドの作り方 プロトタイプからのコピーでオブジェクトを返す、初期化の手間が省けるから。


Prototypeパターンでは、新しいオブジェクトを作成しますが、初期化されていないオブジェクトを作成するのではなく、プロトタイプ(サンプル)オブジェクトからコピーした値で初期化されたオブジェクトを返します。Prototypeパターンは、Propertiesパターンとも呼ばれています。

Prototypeパターンが有効な例としては、データベースのデフォルト値と一致する値でビジネスオブジェクトを初期化することが挙げられます。Prototypeオブジェクトはデフォルト値を保持しており、新しく作成されたビジネスオブジェクトにコピーされます。

GoF本でのPrototypeの例は楽譜の音符(オタマジャクシ)

GoF本はGUIでの例が多い。GoF本のPrototypeは楽譜ソフトを例にしている。楽譜はたくさんの音符から構成されている、そのオタマジャクシの親玉をPrototypeとして設定する。プロトタイプには尻尾があって頭が黒い。それが、高さや長さが変わり尻尾が短くなったり頭が白くなったりする。四分音符は突然長さが変わったりしない。

Prototypeの何がいいのか? Abstract Factoryとの違い、生成するかしないか

・Abstract Factory パターンでなされるように、クライアント・アプリケーションにおいてオブジェクトの生成者をサブクラスにすることを回避する(データ構造をサブクラスに任せない違い
・標準的な方法(例えば'new')で新しいオブジェクトを作ることによる固有のコストが所与のアプリケーションにとって高すぎる時にそれを回避する

一個目は統制が効く、ということで、二個目はオタマジャクシに生成コストをそれほどかけないということだ。

Newをなるべくつかわない事

オブジェクト生成の際に統制が効いていてコストが低ければprototypeが使えそうだ。当然ソースコード中の名前はcreateとか、cloneとなりNewを使わないコーティングになる。

もともとのnewの生成コストが気になるが…

このようなやり方は完全に時代遅れです。Java仮想マシンは当時から劇的に改善されています。オブジェクトの作成は非常に安価になりました。オブジェクトの生成と後始末のコストが非常に効率的になったので、関連するもうひとつの慣習であるオブジェクトプールも時代遅れです。

https://stackoverflow.com/questions/2427317/java-prototype-pattern-new-vs-clone-vs-class-newinstance

Javaについて言うと、newの生成コストを気にする世の中ではないらしい。

こんなのもあるが…

お願い致します