1。シーンの説明
ファクトリーメソッドモード、抽象工場モード、ビルダーモードまで、そしてプロトタイプモードまで、作成モードでは、オブジェクトを作成する方法がコード化の実装からメモリオブジェクト処理に徐々にシフトされることを理解しています。
たとえば、「PDFファイルデータコレクター」と「Excelファイルデータコレクター」のサブクラス/オブジェクトの作成中、
各サブクラスは工場モードで定義され、(要約)工場クラスの工場によって作成されているため、各サブクラスはクラス定義でそれぞれのプロパティを定義できます。
ビルダーモードでは、さまざまなクリエイタークラスビルダーを通じてさまざまなサブオブジェクトが作成され、現時点ではサブクラスが定義されなくなりました。
プロトタイプモードでは、発信者は親オブジェクトのクローニングに基づいて完全に子オブジェクトを作成し、子オブジェクトまたはその関連する工場またはビルダークラスのクラスを作成しません。
3つのモードは、異なるシナリオに対応しています。実際に操作する場合、シナリオに従ってモードが合理的に選択されます。
プロトタイプモードでは、プロトタイプオブジェクトに基づいて新しいオブジェクトが作成されるため、プロトタイプオブジェクトに割り当てられた属性値を新しいオブジェクトで直接使用でき、繰り返しの割り当てを排除できます。
たとえば、機器データコレクターの一般的な初期化作業は、プロトタイプオブジェクトで完了することができ、PDFファイルデータコレクターオブジェクトとExcelファイルデータコレクターオブジェクトをクローン化でき、2つのオブジェクトプロパティのその後の拡張が排除され、パブリック属性の初期化作業が排除されます。
クローニング操作はメモリで完了します。オブジェクトタイプの属性値は参照として保存されるため、クローニングは浅いクローニングと深いクローニングに分割され、シリアル化可能なインターフェイスを通じて深いクローニングが実現されます。
2。サンプルコード
プロトタイプ:
パッケージlims.designpatterndemo.prototypedemo; Import java.io.bytearrayinputStream; Import java.io.io.bytearrayoutputStream; Import java.io.ioexception; Import java.io.objedinputStream; Import java.io.io.objectputputputputputputputputputputputable; serializable {private string filepath = "ファイルパス"; Private String EquipmentData = "ファイルコンテンツ"; // public string getFilepath(){return this.filepath; } public void setfilepath(string filepath){this.filepath = filepath; } public string getequipmentData(){return this.equipmentData; } public void setequipmentData(string quiptiencedata){this.equipmentData = sequimeData; } // private static final long serialversionuid = 1l; Private SerializableObject obj; // public serializableobject getobj(){return obj; } public void setobj(serializableobject obj){this.obj = obj; } // public quipe dataCapture getequipmentDatacapture()throws clonenotsupportedexception {quiptionDataCapture capture =(quipementDataCapture)super.clone();キャプチャを返します。 } // public quipledataCapture getpdffilecapture()throws cloneNotsupportedexception {// seciptiondataCapture capture =(quipementDataCapture)super.clone(); // Capture.SeteQuipmentData( "PDFファイルコンテンツ"); // return Capture; //} // public quipementdataCapture getExcelfileCapture()throws clonenotsupportedexception {// sequipeddatacapture capture =(quipementdatacapture)super.clone(); // Capture.SeteQuipmentData( "Excel File Content"); // return Capture; //}/*ディープコピー*/パブリック機器DataCapture new EquipmentDatacapture()throws ioException、classNotFoundException {/*バイナリストリームを現在のオブジェクトに書き込みます*/ bytearrayoutputStream bos = new bytearrayoutputStream(); ObjectOutputStream OOS = new ObjectOutputStream(BOS); oos.writeobject(this); /*バイナリストリームによって生成された新しいオブジェクトを読み取ります*/ bytearrayinputStream bis = new bytearrayinputStream(bos.tobytearray()); ObjectInputStream ois = new ObjectInputStream(bis); return(sequipeddatapture)ois.readobject(); }} class serializableobjectはserializable {private static final long serialversionuid = 1l;}呼び出し側:
パッケージlims.designpatterndemo.prototypedemo; public class prototypedemo {public static void main(string [] args)throws cloneNotsupportedexception {quippectiondataCapture edc = new sequipeddataputure();機器DataCapture Capture = null; // Capture = edc.getPdffileCapture(); // Capture = EDC.GETEXCELFILECAPTURE(); Capture = edc.getequipmentDatacapture(); Capture.setequipmentData( "機器データファイルコンテンツ"); string filecontent = capture.getEquipmentData(); System.out.println(filecontent); }}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。