Patrón de diseño Prototype

¿Qué es Prototype?

Es un patrón de diseño creacional, que tiene como objetivo crear a partir de un modelo. Especificar el tipo de objetos que se crearán mediante una instancia prototípica, y crear nuevos objetos copiando este prototipo.

Tiene gran simplicidad ya que su concepto es de hacer una copia exacta de otro objeto, esto en lugar de crear uno nuevo, permite crear los objetos pre diseñados sin la necesidad de conocer los detalles de la creación.


¿Cuándo se utiliza Prototype?

La programación de hoy en día tiene que ver directamente con costos. El ahorro es un gran problema cuando se trata de utilizar los recursos de la computadora, por lo que los programadores están haciendo su mejor esfuerzo para encontrar formas de mejorar el rendimiento. Cuando hablamos de la creación de objetos en los que podemos encontrar una manera óptima de instanciarlos, y es donde entra en juego la clonación. Si el costo de la creación de un nuevo objeto es grande y la creación es intensivo en recursos, clonamos el objeto.
El patrón de diseño Prototype funciona para esto. Permite que un objeto pueda crear una copia de si mismo sin conocer su clase o ningún detalle sobre cómo crearlos.


Clonación profunda

Esta clonación se realiza cuando el objeto que se quiere clonar tiene como atributos otros objetos (1 o más) que se deben clonar de igual manera, para retornar una clonación completa del objeto y no referencias a otros ya existentes.

Clonación superficial

Por otro lado, esta clonación es aquella que se realiza cuando el objeto que se quiere clonar no posee otros que se deban copiar(tales como Integer, Char, Bool). Se realiza a nivel de bits.


¿Cómo se implementa?

La idea de este patrón es que los objetos que necesiten ser clonados implementen una interfaz que tenga este método. O bien heredar de una clase abstracta que tenga el método abstracto clonar() para que lo desarrollen sus hijos.

El siguiente diagrama muestra la implementación del patrón con una clase abstracta:

[Tomado del libro: Design Patterns: Elements of Reusable Object-Oriented Software]

El diagrama anterior representa de forma básica la estructura de prototype, el cual clasificaremos en 3 partes para ir comentándolas.

1. Client: Es la clase encargada de solicitar al prototipo que realice la clonación necesaria.

2. Prototype: Se declara una interfaz o clase abstracta en la cual definiremos la operación de clonado que será la utilizada para el proceso de clonación.

3. ConcretePrototypeN: Implementa la Prototype y hace uso del método clone para realizar el clonado de la nueva clase deseada.


Ejemplo

Tendremos una clase medio de transporte que implementa la interfaz cloneable (que permite clonar cualquier objeto), esta clase medio de transporte tendrá de atributos marca, modelo, alimentación, nombre y cantidad de pasajeros. La clase cliente hace peticiones a la clase medio de transporte, y esta clona los objetos que necesita a partir de prototipos ya creados.

En la imagen anterior se puede observar como se hace el llamado al método clonar a un terrestre definido previamente
Implementación de la clase medio de transporte
Implementación de la clase terrestre
Implementación de tipo de alimentación

Bibliografía

Daniel Garcia. (Febrero 2014). PATRONES DE CREACIÓN : PATRÓN PROTOTYPE. 12/10/2016, Sitio web: https://danielggarcia.wordpress.com/2014/02/24/patrones-de-creacion-iii-patron-prototype/

Erich Gamma, John Vlissides, Ralph Johnson y Richard Helm. (1994). Design Patterns: Elements of Reusable Object-Oriented Software. EEUU: Addison-Wesley.

Programación.net. (25 Octubre 2016). Patrones de Diseño : Patrones de Creación — Prototipo. 12/10/2016, de Meet Magento Madrid Sitio web: http://programacion.net/articulo/patrones_de_diseno_v_patrones_de_creacion_prototipo_1005

Autores:

Gómez Alvarado Nelson

González Quirós David

Rodríguez Jiménez Ariel