SlideShare una empresa de Scribd logo
1 de 26
Patrones Creacionales
Programación Orientada a Objetos
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
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
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
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
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
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
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.
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.
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
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
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.
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
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
P. Creacional: Singleton
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
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 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);
}
...
}
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
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
Patrones de Creación
Singleton (Único)
 Patrones relacionados
 Abstract Factory (Factoría Abstracta)
 Builder (Constructor)
 Prototype (Prototipo)
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(), …
Ejemplos
Dos interesantes ejemplos que aclaran el concepto
del patrón Singleton
 http://www.youtube.com/watch?v=f_KJScnY7TA
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

Más contenido relacionado

La actualidad más candente

Metodología basada en componentes
Metodología basada en componentes Metodología basada en componentes
Metodología basada en componentes Anibal Ulibarri
 
Tecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De SoftwareTecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De Softwaremarthahuback
 
Tm07 modelo entidadrelacion_1
Tm07 modelo entidadrelacion_1Tm07 modelo entidadrelacion_1
Tm07 modelo entidadrelacion_1Julio Pari
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)Armando Daniel
 
Análisis y diseño orientado a objetos
Análisis y diseño orientado a objetosAnálisis y diseño orientado a objetos
Análisis y diseño orientado a objetosChristian Leon
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven DevelopmentDhaval Dalal
 
05 junit
05 junit05 junit
05 junitmha4
 
Aula 3 técnicas de teste de software1
Aula 3   técnicas de teste de software1Aula 3   técnicas de teste de software1
Aula 3 técnicas de teste de software1Tiago Vizoto
 
Fitnesse Testing Framework
Fitnesse Testing Framework Fitnesse Testing Framework
Fitnesse Testing Framework Ajit Koti
 
Playwright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern WebPlaywright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern WebApplitools
 
Php Error Handling
Php Error HandlingPhp Error Handling
Php Error Handlingmussawir20
 

La actualidad más candente (20)

Unit Testing in Java
Unit Testing in JavaUnit Testing in Java
Unit Testing in Java
 
Metodología basada en componentes
Metodología basada en componentes Metodología basada en componentes
Metodología basada en componentes
 
Tecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De SoftwareTecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De Software
 
Tm07 modelo entidadrelacion_1
Tm07 modelo entidadrelacion_1Tm07 modelo entidadrelacion_1
Tm07 modelo entidadrelacion_1
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
 
Análisis y diseño orientado a objetos
Análisis y diseño orientado a objetosAnálisis y diseño orientado a objetos
Análisis y diseño orientado a objetos
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
05 junit
05 junit05 junit
05 junit
 
Aula 3 técnicas de teste de software1
Aula 3   técnicas de teste de software1Aula 3   técnicas de teste de software1
Aula 3 técnicas de teste de software1
 
Connection en Java
Connection en JavaConnection en Java
Connection en Java
 
Fitnesse Testing Framework
Fitnesse Testing Framework Fitnesse Testing Framework
Fitnesse Testing Framework
 
Automation testing
Automation testingAutomation testing
Automation testing
 
Metodologia Agil
Metodologia AgilMetodologia Agil
Metodologia Agil
 
RTF - Prasad bhatt
RTF - Prasad bhattRTF - Prasad bhatt
RTF - Prasad bhatt
 
PRACTICA 6 ALICE
PRACTICA 6 ALICEPRACTICA 6 ALICE
PRACTICA 6 ALICE
 
Playwright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern WebPlaywright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern Web
 
Unidad1 2 Lenguajes y automatas
Unidad1 2  Lenguajes y automatasUnidad1 2  Lenguajes y automatas
Unidad1 2 Lenguajes y automatas
 
Automatizacion de Pruebas
Automatizacion de PruebasAutomatizacion de Pruebas
Automatizacion de Pruebas
 
Metodo congruencial mixto en java
Metodo congruencial mixto en javaMetodo congruencial mixto en java
Metodo congruencial mixto en java
 
Php Error Handling
Php Error HandlingPhp Error Handling
Php Error Handling
 

Similar a Patron creacional singleton

Similar a Patron creacional singleton (20)

Transparencias_Patrones.ppt
Transparencias_Patrones.pptTransparencias_Patrones.ppt
Transparencias_Patrones.ppt
 
Patron Singleton
Patron SingletonPatron Singleton
Patron Singleton
 
Presentacion Patrones Creacionales
Presentacion Patrones CreacionalesPresentacion Patrones Creacionales
Presentacion Patrones Creacionales
 
Patrones de diseño Singleton
Patrones de diseño SingletonPatrones de diseño Singleton
Patrones de diseño Singleton
 
2 3 5 Patron De DiseñO Singular (Singleton)
2 3 5 Patron De DiseñO Singular (Singleton)2 3 5 Patron De DiseñO Singular (Singleton)
2 3 5 Patron De DiseñO Singular (Singleton)
 
Patrones
PatronesPatrones
Patrones
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
 
Patrones de diseño de GoF
Patrones de diseño de GoFPatrones de diseño de GoF
Patrones de diseño de GoF
 
Conceptos basicos POO
Conceptos basicos POOConceptos basicos POO
Conceptos basicos POO
 
manual de C#
manual de C#manual de C#
manual de C#
 
Manual c# 2
Manual c# 2Manual c# 2
Manual c# 2
 
Manual de c#
Manual de c#Manual de c#
Manual de c#
 
Patrones de diseño - Henry Vallejo
Patrones de diseño - Henry VallejoPatrones de diseño - Henry Vallejo
Patrones de diseño - Henry Vallejo
 
Abstract Factory
Abstract FactoryAbstract Factory
Abstract Factory
 
Patrones Creacionales
Patrones CreacionalesPatrones Creacionales
Patrones Creacionales
 
Patron de diseño
Patron de diseñoPatron de diseño
Patron de diseño
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Contructores en java(grupo 8)
Contructores en java(grupo 8)Contructores en java(grupo 8)
Contructores en java(grupo 8)
 
INFOGRAFIA.pdf
INFOGRAFIA.pdfINFOGRAFIA.pdf
INFOGRAFIA.pdf
 
Lenguaje de Programación Orientada a Objetos
Lenguaje  de  Programación  Orientada  a Objetos Lenguaje  de  Programación  Orientada  a Objetos
Lenguaje de Programación Orientada a Objetos
 

Patron creacional singleton

  • 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
  • 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 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(), …
  • 25. Ejemplos Dos interesantes ejemplos que aclaran el concepto del patrón 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