Patrón de diseño Singleton usando Java

En este tutorial, aprenderemos cómo crear un patrón de diseño singleton usando Java.

Índice
  1. Visión de conjunto
  2. Implementación

Visión de conjunto

El patrón de diseño singleton es uno de Plantillas de diseño de bandas de cuatro y ven en el plantilla de diseño creativo Categoría. El patrón de diseño singleton asegura que una clase tenga solo un ejemplo y proporciona un punto de acceso global a la misma.

El patrón Singleton es uno de los patrones de diseño más simples pero más controvertidos. Esta es una de las razones por las que se pregunta con frecuencia en las entrevistas técnicas.

Creemos una clase Singleton y también respondamos estas preguntas de seguimiento:

  1. ¿Cómo asegurar hilos de clase singleton?
    utilizando el bloqueo de control dual
  2. ¿Cómo evitar que la deserialización cree un nuevo objeto de clase singleton?
    usando el método readResolve para devolver la misma instancia
  3. ¿Cómo evitar la clonación para crear un nuevo objeto de clase singleton?
    anular el método de clonación para devolver la misma instancia
  4. ¿Cómo evito la reflexión para crear un nuevo objeto de clase singleton (suponiendo que ya exista una instancia)?
    lanzar una excepción desde el constructor privado si la instancia ya existe

Implementación

clase singleton
package com.abc;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamException;
import java.io.Serializable;

/**
 * @author aklahoti
 *
 */
public class Singleton implements Serializable, Cloneable{

 private static final long serialVersionUID = 1L;

 private static Singleton instance = null;
 
 private static Object DUMMY_OBJECT = new Object();
 
 private Singleton(){
  /*To prevent object creation using reflection*/
  if(instance!=null){
   throw new InstantiationError( "Singleton Object is already created." );
  }
 }
 
 public static Singleton getInstance(){
  /*Double checked locking*/
  if(instance == null){
   synchronized (DUMMY_OBJECT) {
    if(instance == null){
     instance = new Singleton();
    }
   }
  }
  return instance;
 }
 
 public static void print(){
  System.out.println("I am a singleton class.");
 }
 
 /*To prevent object creation using deserialization*/
 private Object readResolve() throws ObjectStreamException{
  return instance;
 }
 
 /*To prevent object creation using cloning*/
 @Override
 protected Object clone() throws CloneNotSupportedException {
  return instance;
 }
}

Si quieres conocer otros artículos parecidos a Patrón de diseño Singleton usando Java puedes visitar la categoría Tutoriales.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Esta página web utiliza cookies para analizar de forma anónima y estadística el uso que haces de la web, mejorar los contenidos y tu experiencia de navegación. Para más información accede a la Política de Cookies . Ver mas