説明
あなたはコストオブジェクトを作成する場合は、比較的大きい場合には、同じクラスの異なるオブジェクト(フィールドのほとんどが同じである)との間にほとんど差ながら、(例えば、IO、RPC、データベースを介して行く多数の計算が作成されます)、我々はできます既存のオブジェクトの利用(プロトタイプ)が作成時間を節約の目的を達成するために、新しいオブジェクトを作成するためにコピーする方法(またはコピーと呼ばれる)となりました。あなたはプロトタイピングモード(プロトタイプデザインパターン)と呼ばれるオブジェクトを作成する方法に基づいたプロトタイプは、プロトタイプモデルと呼ばれます。ので 、Javaが クローンオブジェクト()メソッドを提供し、それはJavaのプロトタイプモデルで実装されている非常に簡単です。
浅いクローン
/ コンクリートクラスのプロトタイプ クラス Realizetype 実装Cloneableを { Realizetype() { System.out.printlnは( "詳細なプロトタイピングの成功!" ); } パブリック・オブジェクトのクローン()スローCloneNotSupportedException { System.out.printlnは( "特に成功したプロトタイプのコピーを!" ); リターン(Realizetype)スーパー.clone(); } } // プロトタイプテストモードクラス パブリック クラスPrototypeTest { 公共 静的 ボイドメイン(文字列[]引数)がスローCloneNotSupportedException { Realizetype OBJ1 = 新しいRealizetype()。 Realizetype OBJ2 = (Realizetype)obj1.clone(); System.out.println( "OBJ1 == obj2の?" +(OBJ1 == obj2が)); } }
ディープクローン
// 特定のプロトタイプクラス クラス Realizetypeが実装Cloneableを { Realizetype() { System.out.printlnは( "特定のプロトタイプ作成に成功!" ); } パブリック・オブジェクトのクローンは、()スローCloneNotSupportedException { System.out.printlnは(「特定のプロトタイプの複製の成功を! " ); ByteArrayOutputStream BOは = 新しい新; ByteArrayOutputStream() ObjectOutputStreamのOO = 新しい新しいObjectOutputStreamの(BO)を、 oo.writeObject(この); // シリアライズ するByteArrayInputStream双方向= 新しいれるByteArrayInputStream(bo.toByteArray()); ObjectInputStreamのOI = 新しいObjectInputStreamの(重)。 リターン (Realizetype)oi.readObject(); // 反序列化 } } // 原型模式的测试类 パブリック クラスPrototypeTest { 公共 静的 ボイドメイン(文字列[]引数)がスローCloneNotSupportedException { Realizetype OBJ1 = 新しいRealizetype()。 Realizetype OBJ2 = (Realizetype)obj1.clone(); のSystem.out.println("OBJ1 == obj2の?" +(OBJ1 == obj2が)); } }