PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.
-
Upload
yolanda-miranda-prado -
Category
Documents
-
view
216 -
download
0
Transcript of PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.
![Page 1: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/1.jpg)
PATRON PROTOTYPE
Cristina Merino
Héctor Carbajo
Alicia Arroyo
![Page 2: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/2.jpg)
ÍNDICE
• Propósito• Aplicabilidad• Reglas• Estructura• Participantes• Beneficios• Implementación• Ejemplo
![Page 3: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/3.jpg)
PROPÓSITO
• Es un patrón de creación.
• El objetivo de este patrón es especificar los tipos de objetos a crear por medio de una instancia que hace de prototipo, creando nuevos objetos copiando dicha instancia.
• Todo se basa en clonar un prototipo dado.
![Page 4: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/4.jpg)
APLICABILIDAD
• Se debe usar este patrón cuando un sistema deba ser independiente de cómo se crean, se componen y se representan sus productos, y además:– Cuando las clases a instanciar sean especificadas
en tiempo de ejecución.– Para evitar construir una jerarquía de clases de
fábricas paralela a la jerarquía de clases de producto.
– Cuando las instancias de una clase puedan tener uno de entre sólo unos pocos estados diferentes.
![Page 5: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/5.jpg)
REGLAS
• Algunas de las reglas que se cumplen en este patrón son:– Si un objeto tiene distinto comportamiento según su
estado …– Si una jerarquía de clases tiene muchos niveles …– Si algo se utiliza poco ó no se utiliza …– Si una superclase conoce a alguna de sus subclases …– Si una clase colabora con muchas …– Si un cambio en una interfaz impacta en muchos
clientes …– etc
![Page 6: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/6.jpg)
ESTRUCTURA
![Page 7: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/7.jpg)
PARTICIPANTES
• Prototipo– Declara una interfaz para clonarse
• Prototipo Concreto– Implementa una operación para clonarse
• Cliente– Crea un nuevo objeto pidiéndole a un
prototipo que se clone
![Page 8: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/8.jpg)
BENEFICIOS
• Algunos beneficios de aplicar este patrón son:– Añadir y eliminar productos en tiempo de
ejecución.– Especificar nuevos objetos modificando valores.– Especificar nuevos objetos variando la estructura.– Reducir la herencia.– Configurar dinámicamente una aplicación con
clases
![Page 9: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/9.jpg)
IMPLEMENTACIÓN
• A la hora de implementar prototipos hay que tener en cuenta los siguientes aspectos:
– Usar un gestor de prototipos (Cuando el número de prototipos no es fijo)
– Implementar la operación clonar
– Inicializar los clones (Personalizarlos)
![Page 10: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/10.jpg)
Código en lenguaje Java
EJEMPLO
![Page 11: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/11.jpg)
• Un grupo de científicos ha construido una maquina para clonar, programada de Java.
• El primer experimento consiste en clonar todo el número de ovejas que puedan.
• Más tarde ampliaron la funcionalidad de la máquina para permitir la clonación de vacas.
INTRODUCCIÓN
![Page 12: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/12.jpg)
PROBLEMAS
• La máquina cuenta con varios problemas:
– El método de clonación, devuelve un objeto no una vaca u oveja.
– El método no sabe lo que crear a priori.– Si queremos clonar otro tipo de animal
necesitaremos “arreglar” la máquina.– Máquina difícil de mantener.
![Page 13: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/13.jpg)
SOLUCIÓN
• Dar información a la máquina a priori y pedirle a la misma que le devuelva un número de copias del mismo
• Despreocuparse del funcionamiento de la máquina.
• Añadir funcionalidades especiales a la forma de clonar los animales para tratarlos de una forma u otra.
![Page 14: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/14.jpg)
SOLUCIÓN: Fase 1
• La primera tarea será crear un interfaz ( que extiende Cloneable, implementando de este modo el método clone( ) ), que será el que implementen tanto la Vaca como la Oveja
![Page 15: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/15.jpg)
SOLUCIÓN: Fase 1
• public interface CloneableAnimal extends Cloneable
{
public CloneableAnimal duplicate( );
}
Ese método duplicate( ) será el encargado de crear y devolver una nueva copia de cada animal que lo implemente.
![Page 16: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/16.jpg)
SOLUCIÓN: Fase 2
• La oveja será: • public class Sheep implements CloneableAnimal
{
public Sheep( )
{
System.out.println("Creada la plantilla de la oveja");
}
public CloneableAnimal duplicate( )
{
System.out.println( "La oveja se va a clonar a sí misma" );
Sheep returnValue = null;
![Page 17: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/17.jpg)
SOLUCIÓN: Fase 2• try
{
returnValue = ( Sheep ) super.clone( );
}
catch( Exception e )
{
System.out.println( "error cloning Sheep" );
}
return returnValue;
}
public String toString( )
{ return "Soy una oveja clonada, beeeeee"; } }
![Page 18: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/18.jpg)
SOLUCIÓN: Fase 2
• Aquí esta la vaca: public class Cow implements CloneableAnimal
{ public Cow( ) {
System.out.println( "Creada la plantilla de la vaca" ); }public CloneableAnimal duplicate( ) {
System.out.println( "creando una nueva instancia de Cow" );
return new Cow( ); } public String toString( ) {
return "Muuuu, soy un clon de vaca" ; }
}
![Page 19: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/19.jpg)
SOLUCIÓN: Fase 3
• Ahora, los investigadores tan sólo tendrán que hacer algo así:
• public class Professor
{
public static void sayIt( String words )
{
System.out.println( "" ); System.out.println( words ); System.out.println( "" );
}
![Page 20: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/20.jpg)
SOLUCIÓN: Fase 3
• public static void main( String[] args )
{
CloningMachine cMachine = new CloningMachine( );
sayIt( "creating Sheep and Cow templates" );
Sheep sheepTemplate = new Sheep( );
Cow cowTemplate = new Cow( );
Cow clonedCow = ( Cow )cMachine.newClone( cowTemplate );
sayIt( "primera vaca clonada" );
![Page 21: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/21.jpg)
SOLUCIÓN: Fase 3
• Sheep clonedSheep = ( Sheep ) cMachine.newClone( sheepTemplate );
sayIt( "first cloned sheep" );
System.out.println( clonedSheep );
sayIt( "Creando 10 vacas nuevas" );
CloneableAnimal[] newCows =cMachine.cloneMany(10, cowTemplate);
sayIt( "Creando 10 ovejas nuevas" );
CloneableAnimal[] newSheeps = cMachine.cloneMany(10,sheepTemplate );
![Page 22: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/22.jpg)
SOLUCIÓN: Fase 3
• sayIt( "Probando las vacas" );
for( int i=0; i< newCows.length; i++ )
{
System.out.println( newCows[ i ] );
}
sayIt( "Probando las ovejas" );
for( int i=0; i< newSheeps.length; i++ )
{
System.out.println( newSheeps[ i ] );
}
}
![Page 23: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/23.jpg)
SOLUCIÓN: Fase 4
• La clase CloningMachine es:
public class CloningMachine{
public CloningMachine( ){
}
public Clonable createCopy( IClonable template ){
return template.getCopy( );}
![Page 24: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/24.jpg)
SOLUCIÓN: Fase 4• public Clonable[]createManyCopies(int numCopies,Iclonable template)
{
Clonable[] returnArray = new Clonable[ numCopies ];
for( int i=0; i< numCopies; i++ ){
returnArray[ i ] = template.getCopy( );}
return returnArray;}
![Page 25: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/25.jpg)
Conclusiones
• La máquina crea objetos sin saber de qué tipo deben ser.
• Se ha separado el código que crea los objetos, del código que maneja los detalles de la creación de nuevos objetos, permitiendo añadir nuevas características a los animales clonados.
![Page 26: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.](https://reader035.fdocuments.us/reader035/viewer/2022062519/5665b47b1a28abb57c91d66e/html5/thumbnails/26.jpg)
PATRONES RELACIONADOS
• El patrón Abstract Factory es un rival en algún aspecto, y también pueden usarse juntos.
• Los diseños que hacen un uso intensivo de los patrones Composite y Decorator suelen beneficiarse también de este patrón.