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

Tutoriais Básicos de Java

Controle de fluxo do Java

Java array

Java orientado a objetos (I)

Java orientado a objetos (II)

Java orientado a objetos (III)

Tratamento de Exceções Java

Java Lista (List)

Java Queue (fila)

Conjuntos Map do Java

Conjuntos Java

Entrada e saída do Java (I/O)

Reader do Java/Writer

Outros tópicos do Java

Padrão Singleton Java

Neste tutorial, vamos aprender com exemplos o padrão de design Singleton e como aplicá-lo em Java.

Singleton (único) é um padrão de design, não uma funcionalidade exclusiva do Java. Ele garante que apenas uma instância da classe seja criada.

Os padrões de design são como nossas bibliotecas de código, contendo várias técnicas de codificação compartilhadas por programadores de todo o mundo.

Padrão Singleton Java

A seguir, mostramos como usar singleton no Java.

  • Criar um construtor privado que restringe a criação de objetos fora da classe

  • Criar um atributo privado que referencia o objeto singleton

  • Criar um método public static que nos permite criar e acessar o objeto que criamos. Dentro deste método, criaremos uma condição para restringir a criação de múltiplos objetos.

Este é um exemplo.

class SingletonExample {
    //Referência ao campo privado do objeto
   private static SingletonExample singleObject;
   private SingletonExample() {
       //Construtor da classe SingletonExample
   }
   public static SingletonExample getInstance() {
        //Escrever o código que nos permite criar apenas um objeto
        //acessar o objeto conforme necessário
   }
}

No exemplo acima,

  • private static SingletonExample singleObject - Referência ao objeto da classe

  • private SingletonExample() - Construtor privado, usado para restringir a criação de objetos fora da classe.

  • public static SingletonExample getInstance() - Este método retorna uma referência ao objeto único da classe. Como este método é estático, pode ser acessado pelo nome da classe.

Usar a classe singleton

Ao usar o banco de dados, pode-se usar singleton. Eles podem ser usados para criar um pool de conexões para acessar o banco de dados, reutilizando a mesma conexão para todos os clientes. Por exemplo,

class Database {
   private static Database dbObject;
   private Database() {      
   }
   public static Database getInstance() {
      //Cria o objeto (se ainda não foi criado)
      if(dbObject == null) {
         dbObject = new Database();
      }
       //Retorna o objeto singleton
       return dbObject;
   }
   public void getConnection() {
       System.out.println("Agora já estamos conectados ao banco de dados.");
   }
}
class Main {
   public static void main(String[] args) {
      Database db1;
      //Objeto único que referencia o Database
      db1= Database.getInstance();
      
      db1.getConnection();
   }
}

Quando executarmos o programa, a saída será:

Agora我们已经连接到数据库。

No exemplo acima:

  • Criamos uma classe Singleton Database.

  • dbObject é um campo de tipo de classe. Isso referenciará o objeto da classe Database.

  • Construtor privado Database(), para evitar a criação de objetos fora da classe.

  • Método de tipo de classe estático getInstance() retorna a instância da classe para o exterior.

  • Na classe Main, temos a variável de tipo de classe db1Nós estamos usando db1Chame getInstance() para obter o objeto único Database.

  • Este método getConnection() pode ser usado apenas para acessar o objeto Database.

  • Como o Database pode ter apenas um objeto, todos os clientes podem acessar o banco de dados através de uma única conexão.

Deve ser notado que apenas algumas situações (como logs) fazem sentido usar Singleton. Mesmo as conexões de banco de dados geralmente não devem ser Singleton.

Se você não tem certeza se deve usar Singleton, recomendamos evitar usar Singleton completamente.