ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Compiladores


Enviado por   •  3 de Diciembre de 2014  •  1.229 Palabras (5 Páginas)  •  180 Visitas

Página 1 de 5

El patrón de diseño singleton

El patrón de diseño singleton (instancia única) está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto.

Su intención consiste en garantizar que una clase sólo tenga una instancia y proporcionar un punto de acceso global a ella.

El patrón singleton se implementa creando en nuestra clase un método que crea una instancia del objeto sólo si todavía no existe alguna. Para asegurar que la clase no puede ser instanciada nuevamente se regula el alcance del constructor (con atributos como protegido o privado).

La instrumentación del patrón puede ser delicada en programas con múltiples hilos de ejecución. Si dos hilos de ejecución intentan crear la instancia al mismo tiempo y esta no existe todavía, sólo uno de ellos debe lograr crear el objeto. La solución clásica para este problema es utilizar exclusión mutua en el método de creación de la clase que implementa el patrón.

Las situaciones más habituales de aplicación de este patrón son aquellas en las que dicha clase controla el acceso a un recurso físico único (como puede ser el ratón o un archivo abierto en modo exclusivo) o cuando cierto tipo de datos debe estar disponible para todos los demás objetos de la aplicación.

El patrón singleton provee una única instancia global gracias a que:

• La propia clase es responsable de crear la única instancia.

• Permite el acceso global a dicha instancia mediante un método de clase.

• Declara el constructor de clase como privado para que no sea instanciable directamente.

Ejemplo: java

Una implementación correcta en el lenguaje de programación Java para programas multi-hilo es la solución conocida como "inicialización bajo demanda" sugerida por Bill Pugh:

public class Singleton {

private static Singleton INSTANCE = new Singleton();

// El constructor privado no permite que se genere un constructor por defecto.

// (con mismo modificador de acceso que la definición de la clase)

private Singleton() {}

public static Singleton getInstance() {

return INSTANCE;

}

}

ejemplo correcto de inicialización diferida. Se deja para comentar un error común en Java al no tener en cuenta la sincronización de métodos.

public class Singleton {

private static Singleton INSTANCE = null;

// Private constructor suppresses

private Singleton(){}

// creador sincronizado para protegerse de posibles problemas multi-hilo

// otra prueba para evitar instanciación múltiple

private synchronized static void createInstance() {

if (INSTANCE == null) {

INSTANCE = new Singleton();

}

}

public static Singleton getInstance() {

if (INSTANCE == null) createInstance();

return INSTANCE;

}

}

Modificador final

Pensando por un momento, si el atributo nPersonas no fuese estático, cada objeto (p1, p2 o p3) tendría su propio atributo nPersonas que se inicializaría por defecto con el valor 0 y su propio constructor incrementaría este valor en 1, de este modo tendríamos que nPersonas cuenta con un valor de 1 en cada una de las instancias de Persona p1, p2 o p3.

Cuando necesitamos que el valor de un atributo no cambie durante el transcurso de nuestro programa, debemos utilizar el modificador final en su definición de la siguiente manera:

1 public final float pi = 3.14f;

En este ejemplo utilizamos el modificador final para almacenar el valor de la constante matemática pi, ya que su valor nunca va a cambiar, si por error intentásemos modificar el valor de un atributo definido como final, el compilador nos notificaría un error.

Además, muchas veces los modificadores static y final se utilizan en conjunto para definir constantes como puedes ver en el siguiente ejemplo:

1

2

3

...

Descargar como (para miembros actualizados)  txt (7.6 Kb)  
Leer 4 páginas más »
Disponible sólo en Clubensayos.com