Definición: use instancias prototipo para especificar el tipo de objetos que se crean y crear nuevos objetos copiando estos prototipos.
Tipo: Crear patrón de clase
Diagrama de clases:
El patrón prototipo se usa principalmente para la copia de objetos, y su núcleo es el prototipo de clase prototipo en el diagrama de clases. La clase prototipo debe cumplir con las siguientes dos condiciones:
Implementar la interfaz clonable. Hay una interfaz clonable en el lenguaje Java, que tiene solo una función, que es notificar a la máquina virtual en tiempo de ejecución que puede usar el método clon de manera segura en las clases que implementan esta interfaz. En una máquina virtual de Java, solo se pueden copiar clases que implementan esta interfaz, de lo contrario, se lanzará una clonenotsupportedException en tiempo de ejecución.
Reescribe el método clon en la clase de objeto. En Java, las clases principales de todas las clases son clases de objetos. Hay un método clon en la clase de objeto, que devuelve una copia del objeto, pero su alcance es de tipo protegido, y no se puede llamar a clases generales. Por lo tanto, la clase prototipo debe modificar el alcance del método clon al tipo público.
El modo prototipo es un modo relativamente simple y es muy fácil de entender. Para implementar una interfaz y reescribir un método, se completa el modo prototipo. En aplicaciones prácticas, los patrones prototipos rara vez aparecen solos. A menudo se mezcla con otros patrones, y su prototipo de clase prototipo también a menudo también se reemplaza por clases abstractas.
Código de implementación:
paquete prototypePattern; Public Class PrototyPeClass implementa clonable {@Override PrototyPeclass clone () {PrototyPeClass PrototyPeClass = null; intente {prototypeclass = (prototypeclass) super.clone (); } Catch (clonenotsupportedException e) {// TODO BLOQUE DE CATCA AUTO GENERADA E.PRINTSTACKTRACE (); } return prototypeclass; }}Cliente:
paquete prototypePattern; Cliente de clase pública {public static void main (string [] args) {prototypeclass obj1 = new PrototyPeClass (); Prototypeclass obj2 = obj1.clone (); System.out.println (obj1); System.out.println (obj2); }} Ventajas del modo prototipo y escenarios aplicables
La creación de objetos que usan el modo prototipo es mucho mejor que uno directamente nuevo, porque el método clon de la clase de objetos es un método local que manipula directamente las transmisiones binarias en la memoria, especialmente cuando copia objetos grandes, la diferencia de rendimiento es muy obvia.
Otro beneficio de usar patrones de prototipo es simplificar la creación de objetos, haciendo que la creación de objetos sea tan simple como Copy-Paste cuando editamos un documento.
Debido a las ventajas anteriores, puede considerar usar patrones de prototipo cuando necesita crear objetos similares repetidamente. Por ejemplo, debe crear un objeto en un cuerpo de bucle. Si el proceso de creación de objetos es más complicado o el número de ciclos es muchos, usar el modo prototipo no solo puede simplificar el proceso de creación, sino también mejorar mucho el rendimiento general del sistema.
El prototipo de clase pública implementa clonable {private arrayList list = new ArrayList (); Public Prototype clone () {Prototype Prototype = null; intente {prototipo = (prototipo) super.clone (); Prototype.list = (ArrayList) this.list.clone (); } Catch (ClonenotsupportedException e) {E.PrintStackTrace (); } Prototipo de retorno; }}Notas en modo prototipo:
Dado que ArrayList no es un tipo básico, la lista de variables de miembros no se copiará, y necesitamos implementar una copia profunda por nosotros mismos. Afortunadamente, la mayoría de las clases de contenedores proporcionadas por Java implementan la interfaz clonable. Por lo tanto, no es particularmente difícil lograr una copia profunda.
PD: En los problemas de copia profunda y de copia superficial, se producirá una copia profunda, incluidos los tipos básicos en 8 Java y sus tipos de encapsulación, y también hay tipos de cadenas. El resto son copias superficiales.