2012-07-29 11 views
7

私はJavaデザインパターンを使い、いくつかの疑問/質問プロトタイプデザインパターンを得ました。 最初に私が理解していることを言いましょう。プロトタイプデザインパターンはオブジェクトの作成に使用されます はメモリまたはリソースの面でコストがかかります。だから、その場合はすでに利用可能なオブジェクトのクローンを使用します。 新しいオブジェクトとclone()の作成の違いは何ですか?オブジェクトストアはどこに保存されますか?Javaプロトタイプデザインパターンオブジェクト作成

+0

これはあなたに役立つかもしれません。http://stackoverflow.com/questions/663079/does-cloning-provide-a-performance-improvement-over-constructors-factory-methods –

答えて

3

プロトタイプデザインパターンは、時間の節約と省スペースの2種類のコスト削減を実現します。

時間を節約するには、オブジェクトを作成するときに、ファイル、データベース、またはネットワークを介して構成データを要求するなど、補助情報への高価なアクセスが必要になります。たとえば、Webサーバーに格納されているテンプレートから多数のページを作成する場合は、テンプレートを一度読み取ってクローンして新しいページの開始点を取得するほうが安価です。各ページ。

オリジナルの文字列にたくさんの文字列が含まれている場合、新しいインスタンスを作成するには、完全に新しい不変の文字列を作成するか、手動で文字列を扱う必要があります。プロトタイプパターンを使用すると、クローンがテンプレートの不変部分を共有するようにすることで、この問題を回避することができます。

4

Javaのclone()メソッドは、単に新しいオブジェクトを作成し、メンバ変数の値をコピーします。一般に、新しいオブジェクトを作成するよりも、それほど高価でもコストもかかりません。 clone()newでオブジェクトを作成するよりも安価なのは、オブジェクトのコンストラクタが何か高価な場合です。たとえば、コンストラクタが引数をとり、データベースクエリの一部として使用した場合などです。その場合、clone()を使用すると、高価なクエリ操作が行われないため、安価になります。

このデザインパターンを使用する理由は他にもあります。ほとんどの場合、オブジェクトは使用前に複雑な設定を必要とし、コンストラクタでは便利に実行できません。オブジェクトには設定が必要な20のプロパティがあるとします。コンストラクタパラメータでそれらを設定すると、そのコンストラクタはひどく醜いでしょう - 20個のパラメータを持つコンストラクタを想像してみてください!代わりに、おそらくパラメータを持たないオブジェクトを作成し、ミューテータメソッドを使用して20個の値を設定し、必要に応じて既製のコピーを作成するオブジェクトclone()を作成することができます。 clone()はパラメータを一切必要としないので、明らかに醜いです。このオブジェクトの複数の異なるバージョンの複数のコピーが必要な場合は、プロトタイプパターンが魅力的になります。