patron de diseño prototipo (prototype)

Upload: andreita-mb

Post on 01-Mar-2016

212 views

Category:

Documents


0 download

DESCRIPTION

Este es un patron de diseño requerido para arquitectura de software llamado tambien clonar

TRANSCRIPT

Nombre del Patrn:Prototype.Propsito:Permite realizar al cliente acciones temporales con copias de los objetos sin afectar el objeto original. Para esto se debe clonar el objeto en tiempo de ejecucin.Permite a un objeto crear objetos personalizados sin conocer su clase exacta o los detalles de cmo crearlos. Su tarea es dar objetos prototipo a un objeto que inicializa la creacin de objetos. El objeto de creacin e inicializacin crea objetos mandando a sus objetos prototipo que hagan una copia de si mismos.Descripcin:Este patrn corresponde al grupo de creacinPrototype Declara la interface del objeto que se clona. Suele ser una claseabstracta.PrototypeConcreto Las clases en este papel implementan una operacin por medio de la clonacin de s mismo.Aplicabilidad:Las Clases sern instanciadas sin ser conocidas por el sistema hasta el tiempo de ejecucin.Un sistema debe ser capaz de crear objetos sin conocer su clases exacta, como son creados, o que datos representan.Diseo genrico:Diagrama de clases

Propuesta: En consola poder demostrar el uso del patrn para poder resolver este problema, se creara objetos Figuras el cual tendrn distintos tipos (Cuadrado, Circulo, etc.).Diagrama de clases

Codificacin:Main: public static void main(String[] args) {// Crear una clase circulo Circulo c= new Circulo(); c.setNombre("Circulo 1"); c.mover(1, 1); System.out.println(c.getNombre()); Circulo c2;// se modifica el objeto c// c2=c;// no se modifica------ c2=(Circulo)c.clonar(); c2.setNombre("Circulo 2"); System.out.println(c.getNombre());}public interface Figura { public Figura clonar(); public void setNombre(String nombre); public String getNombre(); public void mover(int x, int y);}

public class Circulo implements Figura { private String nombre; private int x,y;

@Override public Figura clonar() { Figura f=new Circulo(); f.setNombre(this.nombre); f.mover(this.x, this.y); return f; }

@Override public void setNombre(String nombre) {this.nombre=nombre; }

@Override public String getNombre() { return this.nombre; }

@Override public void mover(int x, int y) { this.x=x; this.y=y; } }

public class Cuadrado implements Figura{ private String nombre; private int x,y;

@Override public Figura clonar() { Figura f=new Cuadrado(); f.setNombre(this.nombre); f.mover(this.x,this.y); return f; }

@Override public void setNombre(String nombre) { this.nombre=nombre; }

@Override public String getNombre() { return this.nombre; }

@Override public void mover(int x, int y) { this.x=x; this.y=y; } }