Click here to load reader

Patron creacional singleton

Embed Size (px)

DESCRIPTION

patron

Citation preview

  • 1. Patrones Creacionales Programacin Orientada a Objetos

2. Agenda PATRONES DE DISEO 1. Introduccin 2. Definicin 3. Objetivos de los patrones 4. Categoras de patrones 5. Estructuras o plantillas de patrones 3. Patrones de Creacin Facilitan y simplifican la creacin de objetos Permiten crear objetos sin definir la clase concreta, slo el interfaz que debe implementar Permiten reutilizar otros objetos en vez de crear nuevos debido a restricciones o eficiencia 4. Patrones de Creacin Singleton (nico) Restringe la creacin de un nico objeto de una clase en todo el sistema y permite acceder a l Factory Method (Mtodo Factora) Define un mtodo para la creacin de objetos adems del constructor Builder (Constructor) Simplifica la construccin de objetos complejos definiendo una clase cuya responsabilidad es crear objetos de otras clases 5. Patrones de Creacin Abstract Factory (Fbrica Abstracta) Permite crear objetos de un conjunto de clases relacionadas pero sin especificar la clase concreta, solo el interfaz Prototype (Prototipo) Define clases cuyos objetos pueden clonarse 6. PATRON SINGLETON La oficina de la presidencia de los Estados Unidos es un ejemplo de un Singleton, ya que puede haber como mximo un presidente activo en cualquier momento dado. Independientemente de quin ejerza la funcin, el ttulo "El Presidente de los Estados Unidos" es un punto de 7. PATRON SINGLETON La oficina de la presidencia de los Estados Unidos corresponde a Singleton La oficina cuenta con una instancia operador (el ttulo de presidente de los Estados Unidos), que proporciona acceso a la persona en la oficina En cualquier momento, a lo sumo una instancia nica del Presidente existe El ttulo de la oficina ofrece un acceso controlado a una nica instancia de presidente Desde la oficina de la Presidencia encapsula al presidente, hay un control estricto sobre cmo y cuando el presidente puede acceder 8. PATRON SINGLETON PROBLEMA Queremos tener slo uno de un objeto, pero no hay ningn objeto global que controle la instanciacin de este objeto Varios diferentes objetos cliente necesitan referirse a la misma cosa y queremos asegurarnos de que no tenemos ms que uno de ellos Los objetos necesitan puntos de acceso globales y nicos SOLUCION El Patrn Singleton asegura que una clase tiene solo una instancia y provee un punto de acceso global a sta. 9. Patrones de Creacin Singleton (nico) Propiedades Tipo: Creacin, Nivel: Objeto Propsito Permite tener una nica instancia de esta clase en el sistema, y permite que todas las clases tengan acceso a esa instancia La idea del patrn Singleton es proveer un mecanismo para limitar el nmero de instancias de una clase. Por lo tanto el mismo objeto es siempre compartido por distintas partes del cdigo. Busca garantizar que una clase slo tenga una instancia y proporcionar un punto de acceso global a ella. 10. Patrones de Creacin Singleton (nico) Introduccin Hay veces que se necesita esta funcionalidad Por ejemplo: Un histrico de todas las acciones que realiza el usuario en la aplicacin. Desde todas las clases se necesita usar el mismo objeto HistoryList Se podra crear un nico objeto y pasar ese objeto como parmetro a todos los dems objetos. Puede no saberse a priori quien va a necesitar el objeto y puede ser complejo estar pasndolo constantemente. Slo con documentacin se puede obligar a que nadie ms cree un objeto HistoryList 11. Patrones de Creacin Singleton (nico) Introduccin Se podra crear el objeto al inicio y colocarlo en un atributo esttico. Pero no se podra proporcionar ninguna informacin de inicializacin justo cuando vaya a usarse y no se puede controlar quien accede al objeto 12. Patrones de Creacin Singleton (nico) Aplicabilidad Cuando debe haber exactamente una instancia de una clase y deba ser accesible globalmente Garantiza la existencia de una nica instancia para una clase y la creacin de un mecanismo de acceso global a dicha instancia Es mas comn cuando se requiere representar objetos unvocos. Por ejemplo, si hay un servidor que necesita ser representado mediante un objeto, este debera ser nico, es decir, debera existir una sola instancia y el resto de las clases deberan de comunicarse con el mismo servidor. Un Calendario, por ejemplo, tambin es nico para todos. No debe utilizarse cuando una clase es representado a un objeto que no es nico, por ejemplo, la clase Persona ya que representa a una persona real y cada persona tiene su propio nombre, edad, domicilio, etc. 13. Patrones de Creacin Singleton (nico) Descripcin Asegura crear como mximo una instancia de un objeto. Esta instancia es accedida mediante un mtodo de la clase. Ponga el constructor privado Los clientes (quienes quieren acceder a la case Singleton) acceden a la nica instancia mediante un mtodo llamada getInstance(); El mtodo pblico esttico getInstance() devuelva el objeto. Este mtodo crea la instancia si no se ha creado todava, la guarda como un atributo esttico privado y la devuelve Se puede crear el objeto directamente sobre el atributo esttico 14. Patrones de Creacin Singleton (nico) Implementacin Clase que tiene privado el constructor, mantiene una referencia esttica al nico objeto de la clase y proporciona un mtodo esttico getInstance() para que otras clases accedan al nico objeto El resto de la implementacin es completamente normal 15. P. Creacional: Singleton 16. Ejemplo USTax es el Singleton y solo puede haber una instancia de impuesto de una transaccin dada en un momento Calculadora es el cliente que utiliza la instancia de USTax para obtener el total de la venta USTax tiene una instancia operador que provee acceso al impuesto aplicable a cualquier transaccin de ventas particular USTax es encapsulado, por lo tanto hay un estricto control sobre su acceso 17. Diagrama de clase 18. Calculator public class Calculator { public static void main(String[] args) { USTax tax = USTax.getInstance(); tax.salesTotal(); } } 19. USTax public class USTax { private static USTax instance; private USTax() {}; public static USTax getInstance() { if (instance== null) instance= new USTax(); return instance; } public float salesTotal() { return 2500; } } 20. Patrones de Creacin Singleton (nico) import java.util.ArrayList; import java.util.Collections; import java.util.List; public class HistoryList { private static HistoryList instance = new HistoryList(); private List history = new ArrayList(); private HistoryList() { } public static HistoryList getInstance() { return instance; } public void addCommand(String command) { history.add(command); } public Object undoCommand() { return history.remove(history.size() - 1); } ... } 21. Patrones de Creacin Singleton (nico) Ventajas La clase Singleton es la nica que puede crear objetos de la clase, asegurando la unicidad No se necesita pasar la referencia a todos los objetos que la necesiten, simplificando el desarrollo y haciendo la aplicacin ms mantenible Inconvenientes Puede tener problemas en aplicaciones con muchos hilos de ejecucin y con una nica instancia Si en el sistema evoluciona y se necesitan ms instancias de la clase, habra que cambiar todos los accesos a la clase Singleton 22. Patrones de Creacin Singleton (nico) Variaciones del patrn Mantener varias instancias que pueden ser obtenidas con versiones con parmetros del mtodo getInstance(...) Cuando existen mltiples instancias, pueden ser de clases hijas diferentes dependiendo de los parmetros 23. Patrones de Creacin Singleton (nico) Patrones relacionados Abstract Factory (Factora Abstracta) Builder (Constructor) Prototype (Prototipo) 24. Patrones de Creacin Singleton (nico) Patrn Singleton en la API de Java Clase java.awt.Toolkit Variacin del patrn porque Toolkit es abstracta y la instancia devuelta es de una clase hija El mtodo es getDefaultToolkit() Clase java.lang.Runtime El mtodo es getRuntime() Clase java.text.DateFormat Variacin del patrn porque DateFormat es abstracta Tiene varios mtodos con varias instancias getDateInstance(), getDateInstance(int style), getDateTimeInstance(), 25. Ejemplos Dos interesantes ejemplos que aclaran el concepto del patrn Singleton http://www.youtube.com/watch?v=f_KJScnY7TA 26. DEBER Realizar los siguientes ejercicios tanto en Java como en C# Dos ejercicios del video visto Ejercicio del Instituto Educativo que lo encuentra en: http://migranitodejava.blogspot.com/search/label/Si ngleton