Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Patrones Creacionales
Singleton
2
Singleton Objetivo Asegurar una única instancia de una clase
Proporcionar un punto de acceso global a ella
3
Singleton Motivación Importante tener una única instancia, cuando hay varias impresoras, pero sólo debe haber una cola de impresión (spooler) Sólo debería haber un sistema de ficheros, y un sistema de ventanas Una primera solución es tener una variable global que haga accesible al objeto, pero se tendría la posibilidad de crear múltiples instancias.
4
Singleton Solución Una buena solución es crear una clase que se encargue de mantener una sola instancia, y además, proveer un punto de acceso a los objeto a través de ella.
5
Singleton Aplicabilidad:
Se necesita una sola instancia de una clase y debe ser accesible desde diferentes partes del sistema. Cuando la única instancia debe ser extensible y los clientes tengan que acceder a las subclases sin modificar su código.
6
Singleton Estructura Singleton -singlentonData -instance #Singleton()
+getInstance() +getSinglentonData()
7
Singleton Participantes Colaboraciones
Se define una operación de acceso para los clientes a la instancia única. Puede ser responsable de la creación de la propia instancia. Colaboraciones Los clientes acceden a la instancia única a través del método Instancia del Singleton.
8
Singleton Consecuencias
Se tiene un acceso controlado a la instancia única Espacio de nombres reducido. Es una mejora de las variables globales, con lo que evita tener estas variables guardando casos únicos. Permite el refinamiento de operaciones y la representación Permite un número variable de instancias Tendencia a abusar en su utilización, por su sencillez, en casos en los que no hace falta
9
Singleton Implementación
La clase se implementa de tal forma que sólo se pueda crear una instancia Se utiliza un método de clase (static) para ocultar la operación de creación para garantizar la creación de una instancia Este método tiene acceso a la variable que contiene la instancia y asegura que está inicializada antes de devolver el valor
10
Singleton public class Singleton{ // Atributos protected Singleton(){
// Inicialización de los atributos } /* Variable a la única instancia */ static private Singleton _instancia= null; static public Singleton getInstancia(){ if (_instancia == null) _instancia = new Singleton() return _instancia; /* Métodos adicionales */
11
Singleton El constructor se declara protegido asegurando que no se pueda crear una instancia directamente Una vez que se crea una instancia, no habrá posibilidad de crear ninguna más.
12
Singleton Ejemplo final class Singleton {
private static Singleton s = new Singleton(47); //Instancia de la clase private int i; private Singleton(int x) { i = x; } //constructor privado public static Singleton getReference() { return s; } //Método que nos devuelve la instancia public int getValue() { return i; } public void setValue(int x) { i = x; } } //Varios métodos de la clase
13
Singleton Ejemplo public static void main(String[] args) {
Singleton s = Singleton.getReference(); //Obtenemos un primer objeto String result = "" + s.getValue(); System.out.println(result); //Imprimimos su valor Singleton s2 = Singleton.getReference(); //Obtenemos un 2º objeto de la misma clase s2.setValue(9);//Modificamos el valor de la clase result = "" + s2.getValue(); System.out.println(result); //imprimimos el valor del objeto result = "" + s.getValue(); System.out.println(result); //imprimimos el valor del primer objeto de nuevo }
14
Singleton Ejemplo Salida tras la ejecución del método “main”: 47 9
15
Singleton Usos conocidos Clases para almacenar atributos de sesión
Parámetros de la base de datos Dispositivos de visualización (gestores de ventana)
16
Singleton Patrones relacionados: Abstract Factory Builder Prototype
17
Bibliografía Design Patterns-Elements of reusable OO software (Gamma-Helm-Johnson-Vlissides) Internet
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.