Patrón Prototype: Clonación de Objetos en Diseño de Software

Clase 22 de 27Curso de Patrones de Diseño en JavaScript

Contenido del curso

Resumen

Crear copias exactas de objetos con configuraciones específicas es una necesidad frecuente en el desarrollo de software. El patrón Prototype resuelve este problema de forma elegante, permitiendo generar clones sin acoplar el código a clases concretas. Es el último patrón creacional y uno de los más intuitivos de comprender.

¿Qué es el patrón Prototype y cómo funciona?

El patrón Prototype es un patrón de diseño creacional que permite hacer clones de objetos existentes sin depender de clases concretas [0:25]. La idea central es simple: si tengo un objeto con cierta configuración y ciertas características, puedo obtener una copia exacta de él para modificarla o extenderla sin alterar el original.

Esto resulta especialmente útil cuando necesitamos una configuración base a partir de la cual realizar variaciones. En lugar de construir un objeto desde cero y repetir toda la configuración, simplemente clonamos el que ya existe y ajustamos lo necesario [0:37].

¿Por qué necesitamos prototipos en la producción de coches?

Para entender mejor el patrón, se plantea un escenario práctico dentro del contexto de producción de coches. Un nuevo requerimiento aparece: es necesario realizar pruebas de impacto sobre los vehículos antes de salir al mercado [1:00].

  • Las pruebas no pueden realizarse con los autos listos para ser vendidos.
  • Los coches no pueden salir al mercado si no pasan las pruebas de seguridad.
  • Se decidió fabricar prototipos de prueba para cada modelo [1:10].

Modelos como Sedan Mastodon, Hatchback Mastodon, versiones CVT y versiones Signature necesitan ser clonados para verificar que cumplen los estándares. Se requiere una copia fiel de cada configuración para someterla a las pruebas correspondientes [1:20].

¿Cómo delega Prototype la creación de clones?

La solución que propone el patrón es delegar el proceso de generación de clones a los propios objetos [1:35]. A estos objetos se les denomina precisamente prototipos.

El mecanismo funciona así:

  • Una clase tiene un método clone que retorna un nuevo objeto con la misma configuración de la instancia que invocó ese método [1:47].
  • Si el objeto original tiene una propiedad A con valor 1, al llamar a clone se genera una copia independiente con esa misma configuración, no una referencia al mismo objeto [1:55].
  • Para implementar esto correctamente, se debe declarar una clase base o interfaz que todos los objetos clonables deben implementar [2:10].

Es importante distinguir entre copia y referencia. El método clone no devuelve el mismo objeto, sino una instancia nueva con valores idénticos. Esto garantiza que las modificaciones sobre el clon no afecten al original.

¿Qué elementos componen la estructura del patrón Prototype?

La estructura del patrón se compone de pocos elementos, lo que refuerza su sencillez:

  • Interfaz o clase base clonable: define el contrato con el método clone que todos los objetos clonables deben cumplir.
  • Clases concretas: implementan el método clone, creando y retornando una nueva instancia con la configuración actual.
  • Cliente: solicita clones sin necesidad de conocer la clase concreta del objeto que está clonando.

Esta separación permite que el código cliente trabaje con abstracciones. No importa si el objeto es un Sedan Mastodon o un Hatchback Mastodon; mientras implemente el método clone, puede ser prototipado.

El patrón Prototype demuestra que a veces la solución más efectiva es la más directa: si necesitas una copia, deja que el propio objeto se encargue de generarla. ¿Has tenido situaciones donde clonar objetos te habría simplificado el diseño? Comparte tu experiencia.