En la edición anterior hicimos foco en el patrón estructural PROXY. En esta entrega vamos a indagar en el patrón creacional PROTOTYPE. Allá vamos! 

Como comenté en el artículo introductorio a los patrones de diseño (acá el link), un patrón creacional es aquel que facilita la creación de objetos encapsulando el proceso. 
También vimos que hay 4 elementos que definen un patrón. Así que vamos a utilizarlos para exponer el patrón PROTOTYPE. 

Patrón PROTOTYPE 

Nombre: PROTOTYPE 

Problema: Uso excesivo de memoria y tiempo al crear objetos costosos en tiempo de ejecución. 

Solución: Copiar un objeto existente en vez de crear uno nuevo. El objeto existente actúa como un prototipo y contiene el estado del objeto que va a ser “creado”. 

Consecuencias

  • Ventajas: Crear y eliminar objetos en tiempo de ejecución, permite definir un nuevo comportamiento a través de la composición de objetos (especificando el valor de sus variables). 
     
  • Desventajas: Es una manera muy robusta de solucionar la creación de objetos costosos si no se crean muchos objetos de manera dinámica, oculta las dependencias del cliente, todas las clases tienen que implementar un método CLONE() para poder “crear” un nuevo objeto. 

Ejemplo

El diagrama de clases quedaría de la siguiente manera:



El cliente es quien tiene los prototipos concretos para poder clonarlos. Esto se puede modificar poniendo un store de prototipos entre el cliente y los prototipos. Funcionando este de vínculo entre ambos, agregándole una abstracción más al cliente. El no sabría que se están clonando los objetos, lo único que sabe es que pide un objeto y lo recibe. El diagrama quedaría de la siguiente manera:

Cabe destacar que existen dos tipos de copiado, una superficial y una profunda.
El copiado superficial copia los valores del objeto original, esto hace que en caso de que el objeto original contenga otros objetos la copia va a tener las referencias a esos objetos. Esto hace que si se modifica el original o una copia se vean afectados todos los objetos de ese tipo.
El copiado profundo crea una copia de todos los valores del objeto original, haciendo que este sea totalmente independiente del original. Siendo una copia de ese momento pero no se ven afectados si se modifica uno solo.

Conclusión
Hay que tener cuidado cuando se utiliza este patrón ya que es una solución muy robusta a la creación de objetos costosos y tiene un gran valor si se crean muchos objetos en tiempo de ejecución. Siendo "muchos" algo subjetivo y atado a cada persona. También hay que tener en cuenta que comportamiento queremos que tengas los objetos, si tienen que mantener el comportamiento del original por más que este cambie el comportamiento o si quiero que mantenga el comportamiento original a la hora de copiarse y luego ser independiente del original.
Sin mucho más que añadir, concluyo este artículo. Gracias por acompañarme en esta serie de artículos sobre patrones de diseño.

Saludos!

 

Mandanos tus sugerencias

Ayudanos con ideas para los artículos de este blog a contacto@somospnt.com

¡Seguínos en nuestras redes sociales para enterarte de los últimos posts!