English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Java

Control de flujo de Java

Java Arreglo

Java Orientado a Objetos (I)

Java Orientado a Objetos (II)

Java Orientado a Objetos (III)

Manejo de excepciones en Java

Java Lista (List)

Java Cola (Cola)

Conjuntos de Mapa de Java

Conjuntos de Java

Entrada y salida de Java (I/O)

Lector de Java/Writer

Temas de Java otros

Patrón Singleton en Java

En este tutorial, aprenderemos con ejemplos el patrón de diseño Singleton y cómo se aplica en Java.

Singleton (único) es un patrón de diseño, no una función exclusiva de Java. Asegura que se cree solo una instancia de la clase.

Los patrones de diseño son como nuestras bibliotecas de código, que contienen varias técnicas de codificación compartidas por programadores de todo el mundo.

Patrón Singleton en Java

A continuación, mostramos cómo se utiliza el singleton en Java.

  • Crear un constructor privado que limite la creación de objetos fuera de la clase

  • Crear una propiedad privada que refiere al objeto singleton

  • Crear un método public static que nos permita crear y acceder al objeto que creamos. Dentro del método, crearemos una condición para limitar la creación de múltiples objetos.

Esto es una instancia.

class SingletonExample {
    //Referencia al campo privado del objeto
   private static SingletonExample singleObject;
   private SingletonExample() {
       //Constructor del SingletonExample
   }
   public static SingletonExample getInstance() {
        //Escribir el código que solo nos permite crear un objeto
        //Acceder al objeto según sea necesario
   }
}

En el ejemplo anterior,

  • private static SingletonExample singleObject - Referencia al objeto de la clase

  • private SingletonExample() - Constructor privado, utilizado para limitar la creación de objetos desde fuera de la clase.

  • public static SingletonExample getInstance() - Este método devuelve una referencia al objeto único de esta clase. Dado que este método es estático, se puede acceder utilizando el nombre de la clase.

Usar la clase singleton

Se puede usar el singleton cuando se utiliza la base de datos. Se pueden utilizar para crear una piscina de conexiones para acceder a la base de datos, al mismo tiempo que se reutiliza la misma conexión para todos los clientes. Por ejemplo,

class Database {
   private static Database dbObject;
   private Database() {      
   }
   public static Database getInstance() {
      //Crear el objeto (si aún no se ha creado)
      if(dbObject == null) {
         dbObject = new Database();
      }
       //Devuelve el objeto singleton
       return dbObject;
   }
   public void getConnection() {
       System.out.println("Ahora se ha conectado a la base de datos.");
   }
}
class Main {
   public static void main(String[] args) {
      Database db1;
      //Objeto único que se refiere a Database
      db1= Database.getInstance();
      
      db1.getConnection();
   }
}

当我们运行程序时,输出将是:

现在已经连接到数据库。

在上面的示例中,

  • 我们创建了一个单例类Database。

  • dbObject是一个类类型字段。 这将引用类Database的对象。

  • 私有构造函数Database(),可防止在类外部创建对象。

  • 静态类类型方法getInstance()将类的实例返回给外部。

  • 在Main类中,我们具有类类型变量db1。 我们正在使用db1调用getInstance()来获取Database的唯一对象。

  • 该方法getConnection()只能使用的对象进行访问Database。

  • 由于Database只能有一个对象,因此所有客户端都可以通过单个连接访问数据库。

需要注意的是,只有少数情况(如日志)使单例有意义。甚至数据库连接通常也不应该是单例的。

如果您不确定是否使用单例,我们建议您避免完全使用单例。