Los patrones de diseño esta divididos en tres categorías: creación, estructural y de comportamiento.
El patrón de diseño Prototype, es un patrón de la categoría «creación», como puede ser factoría abstracta. El propósito de este patrón, es dar un mecanismo, que nos permita la creación de instancias nuevas a partir de una ya existente, copiando su estado actual y dandole un nuevo estado o no.
ESCENARIO
Tenemos una linea de montaje de dispositivos móvil y queremos una aplicación que preconfigure un sistema operativo, instalando unas aplicaciones por defecto.
Para implementar este ejemplo, sólo utilizaremos un dominio de objetos y un test que explique el funcionamiento. En este caso, tendremos dos prototipos, que serán IOS y Android, estos objetos, simularán una instancia del sistema operativo, al cual le podemos añadir una lista de aplicaciones.
Para crear los nuevos objetos , utilizaremos un sistema operativo ya existente, el cual clonaremos y le añadiremos las aplicaciones «custom«, en cada momento, de este modo con este ejemplo tan abstracto podemos ilustrar como y para que podemos utilizar Prototype
CUANDO USARLO
Si el sistema tenga que ser independiente de la creación de los objetos
- Se necesita que las instancias que creamos, sean especificas en tiempo de ejecución
- Evita una sobrecarga de clases en la jerarquía de objetos, en nuestro ejemplo, evitaría nuevas clases tipo IOSPackAplicacionesAlpha
ESTRUCTURA
ACTORES
- Cliente: el encargado de ejecutar el método clone y obtener una nueva instancias de un prototipo en concreto (en la implementación el test)
- Prototype: encargada de darle un método común dando la capacidad de clonación
- Concrete prototype: implementa la operación de clonación, devolviendo una instancia de su estado actual
VENTAJAS E INCONVENIENTES
Las ventajas e inconvenientes, es casi las mismas que pueden tener los otros patrones de creación. Por otro lado las grandes ventajas, es poder crear instancias de objetos, modificando valores existentes de una instancia prototipo, sin cambiar el estado de la primera.
Por otro lado, podemos crear objetos nuevos, sin añadir clases en la jerarquía y en tiempo de ejecución!.
IMPLEMENTACION