Sie sind auf Seite 1von 26

da a

Patrones Creacionales

Agenda
1.
2.
3.
4.
5.

PATRONES DE DISEO
Introduccin
Definicin
Objetivos de los patrones
Categoras de patrones
Estructuras o plantillas de patrones

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

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

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

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

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

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

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.

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

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

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.

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

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

P. Creacional: Singleton

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

Diagrama de clase

Calculator
public class Calculator {
public static void main(String[] args) {
USTax tax = USTax.getInstance();
tax.salesTotal();
}
}

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; }
}

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);
}
}

...

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

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

Patrones de Creacin

Singleton (nico)
Patrones relacionados
Abstract Factory (Factora Abstracta)
Builder (Constructor)
Prototype (Prototipo)

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(),

Ejemplos
Dos interesantes ejemplos que aclaran el
concepto del patrn Singleton

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/l
abel/Singleton