1. Szene Beschreibung
Im Erstellungsmodus, vom Factory -Methodenmodus, abstrakter Werksmodus bis hin zum Builder -Modus und dann zum Prototypenmodus, wird mein Verständnis darin, dass die Art und Weise, Objekte zu erstellen, nach und nach von der Codierung der Implementierung zur Verarbeitung von Speicherobjekten verschoben wird.
Zum Beispiel während der Erstellung der Unterklasse/Objekte von "PDF -Dateidatensammler" und "Excel -Dateidatensammler",
Jede Unterklasse wird im Werksmodus definiert und wird von der (abstrakten) Fabrikklassenfabrik erstellt, sodass jede Unterklasse ihre jeweiligen Eigenschaften in der Klassendefinition definieren kann.
Im Builder-Modus werden verschiedene Sub-Objekte durch verschiedene Bauherren erstellt, und die Unterklassen werden zu diesem Zeitpunkt nicht mehr definiert.
Im Prototypenmodus erstellt der Anrufer untergeordnete Objekte, die vollständig auf dem Klonen von übergeordnetem Objekt basieren, und erstellt keine Klassen für das untergeordnete Objekt oder seine zugehörigen Fabrik- oder Builder -Klassen.
Die drei Modi entsprechen unterschiedlichen Szenarien. Beim Tatsächlich wird der Modus gemäß dem Szenario vernünftig ausgewählt.
Im Prototypenmodus wird ein neues Objekt basierend auf dem Prototyp -Objekt erstellt, sodass die dem Prototyp -Objekt zugewiesenen Attributwerten direkt im neuen Objekt verwendet werden können, wodurch wiederholte Zuordnungen eliminiert werden.
Beispielsweise kann die gemeinsame Initialisierungsarbeiten des Instrumentendatensammlers im Prototyp -Objekt abgeschlossen werden, das dann das PDF -Dateidatensammlerobjekt und das Excel -Datei -Datensammlerobjekt herausgekloniert und die anschließende Erweiterung der beiden Objekteigenschaften beseitigt, wodurch die Initialisierungsarbeiten der öffentlichen Attribute beseitigt werden.
Der Klonenbetrieb ist im Speicher abgeschlossen. Da der Attributwert des Objekttyps als Referenz gespeichert wird, wird das Klonieren in flaches Klonen und tiefes Klonen unterteilt, und das tiefe Klonieren wird durch die serialisierbare Schnittstelle realisiert.
2. Beispielcode
Prototyp:
Paket lim.designPatternDemo.Prototypedemo; Import Java.io.BytearrayInputStream; Import Java.io.BytearrayoutputStream; Java.io.ioException importieren Java.io.o. Klonbar, serialisierbar {private String filepath = "Dateipfad"; private String EquipmentData = "Dateiinhalt"; // public String getFilePath () {return this.filepath; } public void setfilepath (String filepath) {this.filepath = filepath; } public String getequipmentData () {return this.equipmentData; } public void setEquipmentData (String EquipmentData) {this.equipmentData = EquipmentData; } // Private statische endgültige lange Serialversionuid = 1L; private serializableObject obj; // public serializableObject getObj () {return obj; } public void setObj (serializableObject obj) {this.obj = obj; } // public EquipmentDatacapture getectentDatacapture () löscht ClonenotsupportedException {EquipmentDatacapture Capture = (EquipmentDatacapture) Super.clone (); Rückfahrerfassung; } // public EquipmentDatacapture getPdffileCapture () löscht Clonenotsupportedexception {// EquipmentDatacapture Capture = (EquipmentDatacapture) super.clone (); // capture.setequipmentData ("PDF -Dateiinhalt"); // Rückgabe capture; //} // public EquipmentDatacapture getExcelfileCapture () löscht Clonenotsupportedexception {// EquipmentDatacapture Capture = (EquipmentDatacapture) Super.clone (); // capture.setequipmentData ("Excel -Dateiinhalt"); // Rückgabe capture; //}/* Deep Copy*/ public EquipmentDatacapture newErtmentDatacapture () löst ioException, classNotFoundException aus {/* Binärer Stream in das aktuelle Objekt*/ bytearrayoutputStream bos = new bytearrayoutputstream (); ObjectOutputStream OOS = New ObjectOutputStream (BOS); oos.writeObject (this); /* Lesen Sie das neue Objekt vor, das vom binären Stream erzeugt wird ObjectInputStream OIS = New ObjectInputStream (BIS); return (EquipmentDatacapture) ois.ReadObject (); }} Klasse SerializableObject implementiert serialisierbar {private statische endgültige lange Serialversionuid = 1L;}Rufseite:
Package Lims.DesignPatternDemo.Prototypedemo; Prototypedemo der öffentlichen Klasse {public static void main (String [] args) löscht Clonenotsupportedexception {EquipmentDatacapture edc = new EquipmentDatacapture () aus; EquipmentDatacapture Capture = null; // capture = edc.getPdffilecapture (); // capture = edc.getExcelfilecapture (); capture = edc.getEquipmentDatacapture (); capture.setequipmentData ("Gerätedateiinhalte"); String fileContent = capture.getEquipmentData (); System.out.println (filecontent); }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.