Patrones de Diseño - Patrón Prototype - ¿Que es el Patrón de Diseño Prototype/Prototipo?

Buenas continuando con los patrones de diseño creacionales hoy vamos a comenzar a ver el patron Prototype/Prototipo

Patrones de Diseño - ¿Que es el Patrón de Diseño Prototype/Prototipo?

El patrón de diseño Prototype sirve para crear clonaciones de objetos (instancias de clases) a fin de no acarrear todo lo que lleva la creación del mismo desde cero, parámetros, métodos a ejecutar, etc. Hay que tener en cuenta que clonar un objeto es mucho mas rápido que crearlo.


Diagrama UML:


Patrones de Diseño - Patrón Prototype - ¿Que es el Patrón de Diseño Prototype/Prototipo?

ObjectPrototype: Declara la interface del objeto que se clona. Suele ser una clase abstracta.
ObjectPrototypeConcreto: Las clases en este papel implementan una operación por medio de la clonación de sí mismo. 
Cliente: Crea nuevos objetos solicitando al prototipo que se clone. 

Nombre del patrón:
Patrón Prototype

Clasificación del Patrón:
Creacional

Intención:
Sirve para generar clones de objetos.


Ejemplo:
Problema: Supongamos que Juan quiere comprar una bicicleta de color rojo y de rodado 22, pero luego cuando llega al lugar y la ve desea verla de color negra y que sea rodado 30.

Solución: 


Patrones de Diseño - Patrón Prototype - ¿Que es el Patrón de Diseño Prototype/Prototipo?


Bicicleta
package ar.com.patronesdisenio.prototype;
/**
* @author nconde
*/
public abstract class Bicicleta implements Cloneable {

private String color;
private String rodado;

/**
* Metodo clonador
*/
public Bicicleta clone() throws CloneNotSupportedException {
return (Bicicleta) super.clone();
}

public abstract String verBicleta();

//Getters and Setters
public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}

public String getRodado() {
return rodado;
}

public void setRodado(String rodado) {
this.rodado = rodado;
}

}


BicicletaModificada
package ar.com.patronesdisenio.prototype.impl;

import ar.com.patronesdisenio.prototype.Bicicleta;

/**
* @author usuario
*/
public class BicicletaModificada extends Bicicleta {

@Override
public String verBicleta() {

return "Este es el color: " + this.getColor() + " El rodado es: " + this.getRodado();
}


}


Cliente
package ar.com.patronesdisenio.prototype.impl;
import ar.com.patronesdisenio.prototype.Bicicleta;

/**
* * @author usuario
*
*/
public class Cliente {

/**
* @param args
* @throws CloneNotSupportedException
*/
public static void main(String[] args) throws CloneNotSupportedException {
Bicicleta bc = new BicicletaModificada();
bc.setColor("Roja");
bc.setRodado("22");
System.out.println(bc.verBicleta());

Bicicleta bc2 = bc.clone();
bc2.setColor("Negro");
bc2.setRodado("30");

System.out.println(bc2.verBicleta());

}
}


Todas las clases en Java heredan un método de la clase Object llamado clone.  (Como vimos acá en su momento)
Un método clone de un objeto retorna una copia de ese objeto. Esto solamente se hace para instancias de clases que dan permiso para ser clonadas. Una clase da permiso para que su instancia sea clonada si, y solo si, ella implementa el interface Cloneable, en el caso que no la clase no tenga permisos para ser clonada lanzara una excepción CloneNotSupportedException.
Patrones de Diseño - Patrón Prototype - ¿Que es el Patrón de Diseño Prototype/Prototipo? Patrones de Diseño - Patrón Prototype - ¿Que es el Patrón de Diseño Prototype/Prototipo? Reviewed by El lado oscuro de java on octubre 28, 2014 Rating: 5

2 comentarios:

Con la tecnología de Blogger.