patron prototype cristina merino héctor carbajo alicia arroyo

26
PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo

Upload: yolanda-miranda-prado

Post on 23-Jan-2016

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo

PATRON PROTOTYPE

Cristina Merino

Héctor Carbajo

Alicia Arroyo

Page 2: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo

ÍNDICE

• Propósito• Aplicabilidad• Reglas• Estructura• Participantes• Beneficios• Implementación• Ejemplo

Page 3: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo

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

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

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

ESTRUCTURA

Page 7: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo

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

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

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

Código en lenguaje Java

EJEMPLO

Page 11: PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo

• 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.