Pds PPrototype - Ejemplo práctico del patrón Prototype PDF

Title Pds PPrototype - Ejemplo práctico del patrón Prototype
Course Patrones de diseño
Institution Universidad Nacional Mayor de San Marcos
Pages 6
File Size 141.9 KB
File Type PDF
Total Downloads 55
Total Views 138

Summary

Ejemplo práctico del patrón Prototype...


Description

Universidad Nacional Mayor de San Marcos Facultad de Ingeniería de Sistemas EP Ingeniería de Sistemas

Patrones de Construcción de Sistemas Guía de Laboratorio 106.1 Patrón Prototype

PATRÓN PROTOTYPE Objetivo El objetivo de la guía es el de afianzar el conocimiento acerca del patrón Prototipo, para resolver problemas reales con el uso del lenguaje de programación Java. Además le presentará las diferentes variantes de dicho patrón y los pros y contras de cada una.

Competencias ● ● ●

Entiende el concepto de patrón Prototipo Utiliza el lenguaje Java para implementar el patrón Resuelve problemas reales mediante el uso del patrón

Definición El patrón de diseño prototipo le permite crear nuevas instancias copiando instancias existentes para evitar la sobrecarga involucrada en la creación de objetos que pueden consumir más recursos. El patrón prototipo se utiliza cuando crear una instancia de una clase es costoso o complicado.

El Patrón en el mundo real Mientras que el prototipo en el que Usted primero piensa es un primer borrador de un nuevo producto, el patrón prototipo es ligeramente diferente. El patrón prototipo implica copiar algo que ya existe. Un ejemplo de esto en el mundo real podría ser dividir una celda, donde se crean dos celdas idénticas. Pero no seamos vayamos demasiado al mundo real - vamos a ver el patrón en un entorno de software.

1/4/2017

0 de 6

Universidad Nacional Mayor de San Marcos Facultad de Ingeniería de Sistemas EP Ingeniería de Sistemas

Patrones de Construcción de Sistemas Guía de Laboratorio 106.1 Patrón Prototype

Patrón de creación Prototipo

Propósito Crear objetos basados en una plantilla de objetos existentes a través de la clonación.

Usar cuando ● ● ● ● ●

La composición, creación y representación de objetos debe ser desacoplada de un sistema. Las clases a crear se especifican en tiempo de ejecución. Existe un número limitado de combinaciones de estados en un objeto. Se requieren objetos o estructuras de objetos que sean idénticos o se asemejen mucho a otros objetos o estructuras de objetos existentes. La creación inicial de cada objeto es una operación costosa.

Ejemplo Los motores de procesamiento de tasas/ratios requieren a menudo la búsqueda de muchos valores de configuración diferentes, haciendo que la inicialización del motor sea un proceso relativamente costoso. Cuando se necesitan varias instancias del motor, por ejemplo, para importar datos de una manera multihilo, el costo de inicializar muchos motores es alto. Utilizando el patrón de prototipo podemos asegurarnos de que solo se tiene que inicializar una sola copia del motor, simplemente clonar el motor para crear un duplicado del objeto ya inicializado. El beneficio adicional de esto es que los clones pueden ser simplificados para incluir sólo datos relevantes para su situación.

Descripción del patrón El patrón Prototype se conoce como patrón creacional, ya que se utiliza para construir objetos de manera tal que tales como estar desacoplados de sus sistemas de implementación. La definición de Prototype según lo provisto en el libro original de la Gang of Four dice:

1/4/2017

1 de 6

Universidad Nacional Mayor de San Marcos Facultad de Ingeniería de Sistemas EP Ingeniería de Sistemas

Patrones de Construcción de Sistemas Guía de Laboratorio 106.1 Patrón Prototype

Cree objetos basados en una plantilla de un objeto existente a través de la clonación. En resumen, en vez de ir a la tarea de crear objetos desde cero cada vez, puede hacer copias de una instancia original y modificarla según sea necesario. El patrón es muy simple: La interfaz prototype declara un método para clonarse, mientras que la clase ConcretePrototype implementa la operación de auto clonación. El patrón es utilizado en Java por la interfaz Clonable. Clonable se implementa como una interfaz de marcadores para mostrar qué objetos pueden ser clonados, ya que Object ya definió un método clone() protegido. El cliente puede anular o llamar a la implementación de superclase de este método de clonación para realizar la copia.

Entonces, ¿cómo funciona en Java? Vamos a utilizar un ejemplo simple para ilustrar este patrón. Para este ejemplo, utilicemos un ejemplo de carrito de compra. Digamos que tenemos un número de artículos que pueden ir en el carro - libros, cds, dvds. Si bien nuestro ejemplo no incluye nada que sea particularmente costoso de crear, debería ilustrar cómo funciona el patrón. Primero, crearemos una clase abstracta para nuestro Item, que será nuestro Prototipo que incluye un método de clonación. // Prototype public abstract class Item { private String title; private double price; public Item clone() { Item clonedItem = null; try { //use default object clone. clonedItem = (Item) super.clone(); //specialised clone clonedItem.setPrice(price); clonedItem.setTitle(title); } catch (CloneNotSupportedException e) { e.printStackTrace(); } // catch return clonedItem; } public String getTitle() { return title; } public double getPrice() { return price;} }

1/4/2017

2 de 6

Universidad Nacional Mayor de San Marcos Facultad de Ingeniería de Sistemas

Patrones de Construcción de Sistemas Guía de Laboratorio 106.1 Patrón Prototype

EP Ingeniería de Sistemas

A continuación crearemos dos ConcretePrototypes //Concrete Prototypes public class Book extends Item{ //extra book stuff } public class CD extends Item{ //extra cd stuff }

Ahora vamos a crear un registro para la creación de artículos public class ItemRegistry{ private Hashtable map public ItemRegistry{ loadCache(); }

= new Hashtable();

public Item createBasicItem(String type) { return map.get(type).clone(); } private void loadCache() { Book book = new Book(); book.setTitle("Design Patterns"); book.setPrice(20.00); map.add("Book", book); CD cd = new CD(); cd.setTitle("Various"); cd.setPrice(10.00); map.add("CD", cd); } }

Por último, aquí está un cliente que hace uso del prototipo. Si necesitamos crear un libro, podemos usar la implementación en caché para cargarlo y modificarlo después. public class Client{ public static void main(String[] args) { ItemRegistry registry = new ItemRegistry(); Book myBook = registry.createBasicItem("Book"); myBook.setTitle("Custom Title"); //etc } }

1/4/2017

3 de 6

Universidad Nacional Mayor de San Marcos Facultad de Ingeniería de Sistemas EP Ingeniería de Sistemas

Patrones de Construcción de Sistemas Guía de Laboratorio 106.1 Patrón Prototype

Cuidado con las desventajas Una de las desventajas de este patrón es que el proceso de copiar un objeto puede ser complicado. Además, las clases que tienen referencias circulares a otras clases son difíciles de clonar. El uso excesivo del patrón podría afectar el rendimiento, ya que el propio prototipo del objeto tendría que ser instanciado si utiliza un registro de prototipos.

Otra implementación del patrón Mientras que la copia superficial se realiza utilizando el método Object.MemberwiseClone y copia los campos no estáticos de un objeto, la copia profunda se utiliza para copiar los tipos de referencia y de valor y le proporciona una instancia distinta a un objeto. Los participantes (clases y objetos) en una implementación típica del patrón de prototipo son los siguientes: Prototipo: define una interfaz para la clonación ConcretePrototype: define un tipo que implementa la operación de clonación Cliente - esto define al consumidor que puede crear una nueva instancia mediante la clonación de un prototipo Teniendo esto en cuenta, implementaremos el patrón de prototipo en esta sección usando tres tipos. Estos incluyen los siguientes: Cliente Gerente de personalización CustomerPrototype public abstract class CustomerPrototype { public abstract CustomerPrototype Clone(bool performDeepCopy); } La clase CustomerPrototype es de naturaleza abstracta y contiene un método abstracto denominado Clone. Este método acepta un parámetro booleano llamado "performDeepCopy". Si el parámetro pasado a él es "verdadero", realizaría una copia profunda, copia superficial de otra manera. A continuación se ofrece la clase CustomerManager. Contiene un diccionario que almacena las instancias de la clase Customer (es simplemente otra clase POCO) dentro de ella. También contiene un indexador llamado CustomerPrototype. La propiedad "set" del indexador se utiliza para almacenar datos en la instancia de Dictionary llamada "customers".

1/4/2017

4 de 6

Universidad Nacional Mayor de San Marcos Facultad de Ingeniería de Sistemas EP Ingeniería de Sistemas

Patrones de Construcción de Sistemas Guía de Laboratorio 106.1 Patrón Prototype

public class CustomerManager { private Dictionary customers = new Dictionary(); public CustomerPrototype this[int index] { get { return customers[index]; } set { customers.Add(index, value); } } } A continuación se ofrece la clase Cliente. Contiene dos propiedades denominadas, FirstName y LastName y dos métodos a saber, Clone y DeepCopy. public class Customer : CustomerPrototype { public string FirstName { get;set; } public string LastName { get; set; } public override CustomerPrototype Clone(bool deepClone) { switch (deepClone) { case true: return this.DeepCopy(this) as CustomerPrototype; case false: return this.MemberwiseClone() as CustomerPrototype; default: return this.MemberwiseClone() as CustomerPrototype; } } private T DeepCopy(T obj) { //Write code here to perform deep copy. } }

Bibliografía ● ●

1/4/2017

Patrón Prototype https://dzone.com/articles/design-patterns-prototype Implementación del patrón de diseño del prototipo http://www.infoworld.com/article/3157366/application-development/implementing-theprototype-design-pattern.html

5 de 6...


Similar Free PDFs