2. Agenda
PATRONES DE DISEÑO
1. Introducción
2. Definición
3. Objetivos de los patrones
4. Categorías de patrones
5. Estructuras o plantillas de patrones
3. Patrones de Creación
Facilitan y simplifican la creación de objetos
Permiten crear objetos sin definir la clase
concreta, sólo el interfaz que debe implementar
Permiten reutilizar otros objetos en vez de crear
nuevos debido a restricciones o eficiencia
4. Patrones de Creación
Singleton (Único)
Restringe la creación de un único objeto de una
clase en todo el sistema y permite acceder a él
Factory Method (Método Factoría)
Define un método para la creación de objetos
además del constructor
Builder (Constructor)
Simplifica la construcción de objetos complejos
definiendo una clase cuya responsabilidad es crear
objetos de otras clases
5. Patrones de Creación
Abstract Factory (Fábrica 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
máximo un presidente
activo en cualquier
momento dado.
Independientemente de
quién ejerza la función,
el título "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 título 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 título 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 cómo y cuando
el presidente puede acceder
8. PATRON SINGLETON
PROBLEMA
Queremos tener sólo uno de un objeto, pero no hay
ningún objeto global que controle la instanciación de
este objeto
Varios diferentes objetos cliente necesitan referirse a
la misma cosa y queremos asegurarnos de que no
tenemos más que uno de ellos
Los objetos necesitan puntos de acceso globales y
únicos
SOLUCION
El Patrón Singleton asegura que una clase tiene solo
una instancia y provee un punto de acceso global a
ésta.
9. Patrones de Creación
Singleton (Único)
Propiedades
Tipo: Creación, Nivel: Objeto
Propósito
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 patrón Singleton es proveer un
mecanismo para limitar el número de instancias de
una clase. Por lo tanto el mismo objeto es siempre
compartido por distintas partes del código. Busca
garantizar que una clase sólo tenga una instancia y
proporcionar un punto de acceso global a ella.
10. Patrones de Creación
Singleton (Único)
Introducción
Hay veces que se necesita esta funcionalidad
Por ejemplo: Un histórico de todas las acciones que
realiza el usuario en la aplicación. Desde todas las
clases se necesita usar el mismo objeto HistoryList
Se podría crear un único objeto y pasar ese objeto como
parámetro a todos los demás objetos. Puede no saberse
a priori quien va a necesitar el objeto y puede ser
complejo estar pasándolo constantemente. Sólo con
documentación se puede obligar a que nadie más cree
un objeto HistoryList
11. Patrones de Creación
Singleton (Único)
Introducción…
Se podría crear el objeto al inicio y colocarlo en un
atributo estático. Pero no se podría proporcionar
ninguna información de inicialización justo cuando
vaya a usarse y no se puede controlar quien
accede al objeto
12. Patrones de Creación
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 creación de un mecanismo de acceso global a dicha
instancia
Es mas común cuando se requiere representar objetos
unívocos. Por ejemplo, si hay un servidor que necesita ser
representado mediante un objeto, este debería ser único, es
decir, debería existir una sola instancia y el resto de las clases
deberían de comunicarse con el mismo servidor. Un Calendario,
por ejemplo, también 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 Creación
Singleton (Único)
Descripción
Asegura crear como máximo una instancia de un objeto.
Esta instancia es accedida mediante un método de la
clase.
Ponga el constructor privado
Los clientes (quienes quieren acceder a la case Singleton)
acceden a la única instancia mediante un método llamada
getInstance();
El método público estático getInstance() devuelva
el objeto. Este método crea la instancia si no se ha
creado todavía, la guarda como un atributo estático
privado y la devuelve
Se puede crear el objeto directamente sobre el atributo
estático
14. Patrones de Creación
Singleton (Único)
Implementación
Clase que tiene privado el
constructor, mantiene una
referencia estática al único
objeto de la clase y proporciona
un método estático
getInstance() para que
otras clases accedan al único
objeto
El resto de la implementación
es completamente normal
16. Ejemplo
USTax es el Singleton y solo puede haber una
instancia de impuesto de una transacción 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
transacción de ventas particular
USTax es encapsulado, por lo tanto hay un
estricto control sobre su acceso
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 Creación
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 Creación
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 aplicación más mantenible
Inconvenientes
Puede tener problemas en aplicaciones con muchos
hilos de ejecución y con una única instancia
Si en el sistema evoluciona y se necesitan más
instancias de la clase, habría que cambiar todos los
accesos a la clase Singleton
22. Patrones de Creación
Singleton (Único)
Variaciones del patrón
Mantener varias instancias que pueden ser
obtenidas con versiones con parámetros del
método getInstance(...)
Cuando existen múltiples instancias, pueden ser de
clases hijas diferentes dependiendo de los
parámetros
23. Patrones de Creación
Singleton (Único)
Patrones relacionados
Abstract Factory (Factoría Abstracta)
Builder (Constructor)
Prototype (Prototipo)
24. Patrones de Creación
Singleton (Único)
Patrón Singleton en la API de Java
Clase java.awt.Toolkit
Variación del patrón porque Toolkit es abstracta y la
instancia devuelta es de una clase hija
El método es getDefaultToolkit()
Clase java.lang.Runtime
El método es getRuntime()
Clase java.text.DateFormat
Variación del patrón porque DateFormat es abstracta
Tiene varios métodos con varias instancias
getDateInstance(), getDateInstance(int
style), getDateTimeInstance(), …
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