1. Description de la scène
Dans le mode de création, du mode Méthode d'usine, du mode d'usine abstrait, au mode Builder, puis au mode prototype, ma compréhension est que la façon de créer des objets est progressivement déplacée de l'implémentation de codage vers le traitement des objets de mémoire.
Par exemple, lors de la création de la sous-classe / objets de "collecteur de données de fichiers PDF" et "Collecteur de données de fichiers Excel",
Chaque sous-classe est définie en mode d'usine et est créée par l'usine de classe d'usine (abstraite), de sorte que chaque sous-classe peut définir ses propriétés respectives dans la définition de la classe;
En mode générateur, différents sous-objets sont créés via différents constructeurs de classes de créateurs, et les sous-classes ne sont plus définies à ce moment;
En mode prototype, l'appelant crée des objets enfants entièrement basés sur le clonage des objets parents et ne crée pas de classes pour l'objet enfant ou ses classes d'usine ou de générateur connexes.
Les trois modes correspondent à différents scénarios. Lorsqu'il fonctionne réellement, le mode est sélectionné raisonnablement en fonction du scénario.
En mode prototype, un nouvel objet est créé sur la base de l'objet Prototype, de sorte que les valeurs d'attribut affectées à l'objet Prototype peuvent être utilisées directement dans le nouvel objet, éliminant les affectations répétées;
Par exemple, le travail d'initialisation commun du collecteur de données de l'instrument peut être achevé dans l'objet Prototype, qui peut ensuite être cloné de l'objet de collecteur de données de fichiers PDF et de l'objet de collecteur de données de fichier Excel, et l'agrandissement ultérieur des deux propriétés d'objet est éliminée, ce qui élimine le travail d'initialisation des attributs publics;
L'opération de clonage est terminée en mémoire. Étant donné que la valeur d'attribut du type d'objet est stockée en tant que référence, le clonage est divisé en clonage peu profond et clonage profond, et le clonage profond est réalisé via l'interface sérialisable.
2. Exemple de code
Prototype:
Package lims.designpatterndemo.prototypedemo; import java.io.bytearrayinputStream; importer java.io.bytearrayoutputStream; importer java.io.ioexception; import java.io.objectInputStream; import java.io.objectOutStrem Clonable, sérialisable {private string filepath = "file path"; String Private EquipmentData = "Contenu de fichier"; // 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 = équipementdata; } // Long SerialVersionUID final statique privé = 1l; SerializableObject OBJ privé; // public serializableObject getObj () {return obj; } public void setObj (serializableObject obj) {this.obj = obj; } // public EquipmentDatacapture GetEquipmentDatacapture () lève ClonenotsupporTedException {EquipmentDatacapture Capture = (EquipmentDatacapture) super.clone (); retour de capture; } // public EquipmentDatacapture getpdffileCapture () lève ClonenotsupporTedException {// EquipmentDatacapture Capture = (EquipmentDatacapture) super.clone (); // capture.setehipmentData ("contenu de fichier PDF"); // return capture; //} // public EquipmentDatacapture GetExcelFileCapture () lève ClonenotsupporTedException {// EquipmentDatacapture Capture = (EquipmentDatacapture) super.clone (); // capture.setehipmentData ("contenu de fichier Excel"); // return capture; //} / * Copie profonde * / public EquipmentDatacapture NewEquipmentDatacapture () lève IOException, classNotFoundException {/ * Écrivez le flux binaire vers l'objet actuel * / byteArrayOutStream bos = new ByteArrayOutputStream (); ObjectOutputStream OOS = new ObjectOutputStream (BOS); oos.writeObject (this); / * Lisez le nouvel objet généré par le flux binaire * / bytearrayInputStream bis = new ByteArrayInputStream (bos.toByTearray ()); ObjectInputStream oiS = new ObjectInputStream (bis); retour (équipementDatacapture) oiS.ReadObject (); }} class SerializableObject implémente sérialisable {private static final long SerialVersionUID = 1l;}Côté appel:
package lims.designpatterndemo.prototypedemo; public class prototypedemo {public static void main (String [] args) lève Clonenotsuppordexception {EquipmentDatacapture edc = new équipedatacapture (); EquipmentDatacapture Capture = null; // capture = edc.getpdffileCapture (); // capture = edc.getExcelFileCapture (); capture = edc.getEQUIPmentDatacapture (); capture.setehipmentData ("Contenu du fichier de données d'équipement"); String fileContent = capture.getEQUIPmentData (); System.out.println (FileContent); }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.