Latest web development tutorials

modelo de prototipo

Se utilizó el modelo de prototipo (modelo prototipo) para crear un objeto duplicado, garantizando al mismo tiempo el rendimiento. Este tipo de patrones de diseño pertenecen crear esquema, que proporciona la mejor manera de crear objetos.

Este modelo es un prototipo de interfaz, que se utiliza para crear un clon del objeto actual. Cuando el costo directo de la creación de un objeto es relativamente grande, a continuación, utilizando este modelo. Por ejemplo, un objeto tiene que ser creado después de la base de datos es una operación costosa. Podemos almacenar en caché el objeto la próxima vez que una petición para volver a su clon, el tiempo necesario para actualizar la base de datos, con el fin de reducir las llamadas bases de datos.

introducción

Intención: El prototipo utilizado para crear instancias de los tipos de objetos especificados, y crear nuevos objetos copiando el prototipo.

Principalmente para resolver: la creación y eliminación de prototipo en tiempo de ejecución.

Cuándo utilizar: 1, cuando un sistema debe ser independiente de la creación del producto, composición y representación.2, cuando una instancia de la clase se va a especificar en tiempo de ejecución, por ejemplo, por la carga dinámica. 3, con el fin de evitar la creación de una jerarquía de clases y la jerarquía de productos cuando la clase de fábrica paralelo. 4, cuando una instancia de una clase puede tener algunas combinaciones diferentes de estado en un momento dado. Establecer un número correspondiente de prototipos y clonar ellos puede ser más conveniente que el manual cada vez con el estado apropiado de la instancia de la clase.

¿Cómo resolver: el uso deun objeto prototipo existentes, y producir rápidamente objeto prototipo como una instancia.

Código Clave: 1, para lograr la operación de clonación, JAVA herencia Cloneable, reescribir clone (), puede ser utilizado en MemberwiseClone clase de objetos .NET () para lograr el objetivo de la copia o la serialización de manera superficial para conseguir una copia en profundidad.2, el mismo modelo de prototipo para el acoplamiento entre el aislamiento del tipo específico (tipo variable) entre el objeto y la clase de usuario, sino que también requiere que estos "tipo variable" tiene una interfaz estable.

Ejemplos de aplicación: 1, la división celular.2, JAVA método clone Object () en.

Ventajas: 1, se mejora el rendimiento.2 escapar constructor restricción.

Desventajas: 1, con un método de clonación requiere tener en cuenta la clase de funciones, que la nueva clase no es difícil, pero para las clases existentes pueden no ser muy fácil, especialmente cuando una referencia de clase no es compatible con la serialización de objeto indirecto, o una estructura cíclica que contiene una referencia al tiempo.2, debe implementar la interfaz Cloneable. 3, evitar el constructor de restricción.

Escenarios de uso: 1, escenarios de optimización de recursos.2, la inicialización de clase tienen que digerir una gran cantidad de recursos, incluyendo los datos de los recursos, los recursos de hardware. 3, el rendimiento y los requisitos de seguridad de la escena. 4, mediante la generación de un nuevo objeto requiere muy tediosa preparación o datos de acceso, puede utilizar el modelo de prototipo. 5, una pluralidad de objetos modificados por escena. 6, un objeto tiene que proporcionar acceso a otros objetos, y cada persona que llama puede que tenga que modificar su valor, considere el uso de un modelo prototipo de múltiples copias de los objetos utilizados por la persona que llama. 7, en el proyecto actual, el modelo de prototipo rara vez se producen solos, y el patrón método de fábrica generalmente aparecen juntos, crean un método clone objeto, y luego presentó a la persona que llama por el método de fábrica. Y el modelo prototipo de Java se ha incorporado como un todo integral, que se puede usar fácilmente para su uso.

Nota: Con una clase creando instancias para construir el nuevo objeto es diferente, el modelo prototipo es generar un nuevo objeto mediante la copia de un objeto existente.copia superficial se da cuenta Cloneable, volver a grabar una copia profunda se lee secuencia binaria mediante la aplicación de Serializable.

realización

Vamos a crear unaformaclase abstracta y se extiende la claseShapeclases de entidad. El paso siguiente es definir laShapeCache clase,la forma de estos objetos se almacenan en unaHashtableen, y en el momento de la solicitud para volver a sus clones.

PrototypPatternDemo,nuestras clases de demostración utilizando la claseShapeCachepara obtener el objetoShape.

modelo de prototipo diagrama UML

Paso 1

Crear una clase abstracta que implementa la interfazclonable.

Shape.java

Forma clase abstracta implementa pública Cloneable {
   
   String id privada;
   tipo String protegida;
   
   abstract void draw ();
   
   Cadena getType pública () {
      Tipo de retorno;
   }
   
   Cadena getId pública () {
      Identificación del retorno;
   }
   
   pública setId void (String id) {
      this.id = id;
   }
   
   clon public Object () {
      Objeto clon = null;
      try {
         clon = super.clone ();
      } Catch (CloneNotSupportedException e) {
         e.printStackTrace ();
      }
      clon de retorno;
   }
}

Paso 2

Crear clases de entidad de arriba se extiende la clase abstracta.

Rectangle.java

public class rectángulo amplía Shape {

   pública Rectángulo () {
     type = "Rectángulo";
   }

   @ Override
   sorteo public void () {
      ( "Método Dentro del rectángulo :: draw ().") System.out.println;
   }
}

Square.java

public class Square amplía Shape {

   Plaza pública () {
     type = "Square";
   }

   @ Override
   sorteo public void () {
      ( "Método de la plaza interior :: draw ().") System.out.println;
   }
}

Circle.java

Círculo clase pública se extiende en forma de {

   pública círculo () {
     type = "Círculo";
   }

   @ Override
   sorteo public void () {
      ( "Método dentro del círculo :: draw ().") System.out.println;
   }
}

paso 3

Crear una clase, obtener las clases de entidad de la base de datos y los almacena en unatabla hashen.

ShapeCache.java

java.util.Hashtable importación;

ShapeCache public class {
	
   privada estática Hashtable <String, Forma> shapeMap 
      = New Hashtable <String, Forma> ();

   Forma estática pública getShape (String ShapeID) {
      Forma cachedShape = shapeMap.get (ShapeID);
      retorno (Forma) cachedShape.clone ();
   }

   // Para cada consultas de bases de la forma de ejecución, y crear la forma // shapeMap.put (ShapeKey, forma);
   // Por ejemplo, queremos añadir tres formas pública loadCache static void () {
      Círculo círculo = new Circle ();
      circle.setId ( "1");
      shapeMap.put (circle.getId (), círculo);

      Square = new cuadrado ();
      square.setId ( "2");
      shapeMap.put (square.getId (), cuadrado);

      Rectángulo rectángulo = new Rectangle ();
      rectangle.setId ( "3");
      shapeMap.put (rectangle.getId (), rectángulo);
   }
}

Paso 4

PrototypePatternDemoutilizar la claseShapeCachepara obtener la forma del clon se almacena enla tabla hash.

PrototypePatternDemo.java

public class {PrototypePatternDemo
   principales argumentos (String []) {public static void
      ShapeCache.loadCache ();

      Forma clonedShape = ShapeCache.getShape (Forma) ( "1");
      System.out.println ( "Forma:" + clonedShape.getType ());		

      Forma clonedShape2 = ShapeCache.getShape (Forma) ( "2");
      System.out.println ( "Forma:" + clonedShape2.getType ());		

      Forma clonedShape3 = ShapeCache.getShape (Forma) ( "3");
      System.out.println ( "Forma:" + clonedShape3.getType ());		
   }
}

paso 5

Verifique la salida.

Forma: Círculo
Forma: Cuadrado
Forma: Rectángulo