1. Descripción de la escena
En el modo de creación, desde el modo de método de fábrica, el modo de fábrica abstracta, al modo de constructor, y luego al modo prototipo, tengo entendido que la forma de crear objetos se cambia gradualmente de la implementación de codificación al procesamiento de objetos de memoria.
Por ejemplo, durante la creación de la subclase/objetos de "recopilador de datos de archivos PDF" y "recopilador de datos de archivos de Excel",
Cada subclase se define en el modo de fábrica y es creado por la fábrica de clase (Resumen) de fábrica, por lo que cada subclase puede definir sus propiedades respectivas en la definición de clase;
En el modo Builder, se crean diferentes subobjetos a través de diferentes constructores de clases de creadores, y las subclases ya no se definen en este momento;
En el modo prototipo, la persona que llama crea objetos infantiles basados completamente en la clonación de objetos principales, y no crea clases para el objeto infantil o sus clases de fábrica o constructor relacionadas.
Los tres modos corresponden a diferentes escenarios. Cuando realmente funciona, el modo se selecciona razonablemente según el escenario.
En el modo prototipo, se crea un nuevo objeto basado en el objeto prototipo, por lo que los valores de atributo asignados al objeto prototipo se pueden usar directamente en el nuevo objeto, eliminando las asignaciones repetidas;
Por ejemplo, el trabajo de inicialización común del recopilador de datos del instrumento se puede completar en el objeto Prototype, que luego se puede clonar el objeto del recopilador de datos de archivos PDF y el objeto de recolector de datos de archivo de Excel, y se elimina la expansión posterior de las dos propiedades del objeto, que elimina el trabajo de inicialización de atributos públicos;
La operación de clonación se completa en la memoria. Dado que el valor de atributo del tipo de objeto se almacena como referencia, la clonación se divide en clonación superficial y clonación profunda, y la clonación profunda se realiza a través de la interfaz serializable.
2. Código de muestra
Prototipo:
paquete lims.designpatterndemo.prototypedemo; import java.io.bytearrayInputStream; import java.io.bytearRayutputStream; import java.io.ioException; importación de importación de importación; Clonable, serializable {private String filePath = "Path de archivo"; String private EquipmentData = "File Content"; // 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 estático final de serie en serie privado serializableBject obj; // public SerializableObject getObj () {return obj; } public void setobj (SerializableObject obj) {this.obj = obj; } // Equipo públicoDataCapture getEquipmentDataCapture () arroja clonenotsupportedException {EquipmentDataCapture Capture = (EquipmentDataCapture) Super.Clone (); Captura de retorno; } // Equipo públicoDataCapture getpdffileCapture () arroja clonenotsupportedException {// EquipeDataCapture Capture = (EquipmentDataCapture) Super.Clone (); // Capture.setequipmentData ("contenido de archivo PDF"); // return Capture; //} // Equipo públicoDataCapture getExcEfLeCapture () arroja clonenotsupportedException {// EquipeDataCapture Capture = (EquipmentDataCapture) Super.Clone (); // Capture.setequipmentData ("Contenido de archivo de Excel"); // return Capture; //}/* Copia profunda*/ public EquipmentDataCapture NewequipmentDataCapture () lanza ioexception, classNotFoundException {/* Escribir la transmisión binaria al objeto actual*/ bytearRAyOutputStream bos = new byteArArAyutputStream (); ObjectOutputStream oos = new ObjectOutputStream (BOS); oos.writeObject (esto); /* Lea el nuevo objeto generado por la transmisión binaria*/ bytearrayInputStream bis = new ByteArrayInputStream (bos.tobytearray ()); ObjectInputStream OIS = new ObjectInputStream (BIS); return (EquipmentDataCapture) ois.readObject (); }} clase SerializableObject implementa serializable {private static final long SerialVersionUid = 1l;}Lado de llamadas:
paquete lims.designpatterndemo.prototypedemo; public class Prototypedemo {public static void main (string [] args) arroja clonenotsupportedexception {EquipmentDataCapture edc = nuevo EquipmentDataCapture (); EquipmentDataCapture Capture = null; // capture = edc.getpdffileCapture (); // capture = edc.getExcEfLeCapture (); captura = edc.getEquipmentDataCapture (); capture.setequipmentData ("Contenido del archivo de datos del equipo"); Cadena fileContent = captur.getEquipmentData (); System.out.println (fileContent); }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.