プロトタイプのデザインパターンを調べていて、いくつか質問がありました。
プロトタイプのデザインパターンは、メモリやリソースの点でコストのかかるオブジェクトの作成に使用されることを理解しました。その場合、すでに利用可能なオブジェクトのクローンを使用します。
new
では、オブジェクトの作成との違いは何clone()
ですか?オブジェクトはメモリのどこに保存されますか?
プロトタイプのデザインパターンを調べていて、いくつか質問がありました。
プロトタイプのデザインパターンは、メモリやリソースの点でコストのかかるオブジェクトの作成に使用されることを理解しました。その場合、すでに利用可能なオブジェクトのクローンを使用します。
new
では、オブジェクトの作成との違いは何clone()
ですか?オブジェクトはメモリのどこに保存されますか?
Javaclone()
メソッドは、新しいオブジェクトを作成し、メンバー変数の値をそこにコピーするだけです。一般に、新しいオブジェクトを作成するよりもコストが高くも低くもありません。clone()
オブジェクトを作成するよりもコストがかからないのは、オブジェクトのコンストラクターがコストのかかる処理を行う場合だけnew
です。たとえば、コンストラクターが引数を取得し、それらをデータベース クエリの一部として使用した場合はどうなるでしょうか。その場合、clone()
高価なクエリ操作が発生しないため、使用する方が安価です。
ただし、この設計パターンを使用する理由は他にもあります。ほとんどの場合、オブジェクトを使用する前に複雑な設定が必要で、コンストラクターでは簡単に行うことができない場合です。オブジェクトに、設定する必要のある 20 個のプロパティがあるとします。コンストラクターのパラメーターでそれらを設定すると、そのコンストラクターはひどく醜いものになります.20個のパラメーターを持つコンストラクターを想像してみてください! 代わりに、おそらくパラメーターなしでオブジェクトを構築し、mutator メソッドを使用して 20 個の値を設定し、clone()
必要に応じてオブジェクトを既成のコピーを作成することができます。clone()
パラメータをまったく必要としないため、明らかに見苦しくありません。このオブジェクトのいくつかの異なるバージョンの複数のコピーが必要な場合は、プロトタイプ パターンが魅力的です。
プロトタイプ設計パターンは、時間の節約とスペースの節約の 2 種類のコスト削減を提供します。
時間の節約は、オブジェクトの作成に補助情報へのコストのかかるアクセスが必要な場合 (たとえば、ファイル、データベース、またはネットワーク経由で構成データを要求する場合) に役立ちます。たとえば、Web サーバーに保存されているテンプレートから多数のページを作成している場合、Web サーバーに個別にクエリを実行するよりも、テンプレートを 1 回読み取り、それを複製して新しいページごとの開始点を取得する方が安価です。各ページ。
メモリの節約は、不変オブジェクトを再利用することで実現します。元のオブジェクトに多数の文字列が含まれている場合、新しいインスタンスを作成するには、まったく新しい不変文字列を作成するか、文字列インターンを手動で処理する必要があります。プロトタイプ パターンを使用すると、テンプレートの不変部分をクローンに共有させることで、この問題を適切に回避できます。