Java Singleton (com exemplo)

Neste tutorial, aprenderemos sobre o padrão de design singleton e como aplicá-lo em Java com a ajuda de exemplos.

Singleton é um padrão de projeto em vez de um recurso específico do Java. Isso garante que apenas uma instância de uma classe seja criada.

Um padrão de design é como nossa biblioteca de código, que inclui várias técnicas de codificação compartilhadas por programadores em todo o mundo.

Java Singleton

Veja como podemos usar singletons em Java.

  • crie um privateconstrutor que restringe a criação de um objeto fora da classe
  • crie um privateatributo que se refere ao objeto singleton.
  • criar um public staticmétodo que nos permite criar e acessar o objeto que criamos. Dentro do método, criaremos uma condição que nos impede de criar mais de um objeto.

Aqui está um exemplo.

 class SingletonExample ( // private field that refers to the object private static SingletonExample singleObject; private SingletonExample() ( // constructor of the SingletonExample class ) public static SingletonExample getInstance() ( // write code that allows us to create only one object // access the object as per our need ) ) 

No exemplo acima,

  • private static SingletonExample singleObject - uma referência ao objeto da aula.
  • private SingletonExample() - um construtor privado que restringe a criação de objetos fora da classe.
  • public static SingletonExample getInstance()- este método retorna a referência ao único objeto da classe. Já que o método estático, ele pode ser acessado usando o nome da classe.

Uso da Classe Singleton

Singletons podem ser usados ​​ao trabalhar com bancos de dados. Eles podem ser usados ​​para criar um pool de conexão para acessar o banco de dados enquanto reutiliza a mesma conexão para todos os clientes. Por exemplo,

 class Database ( private static Database dbObject; private Database() ( ) public static Database getInstance() ( // create object if it's not already created if(dbObject == null) ( dbObject = new Database(); ) // returns the singleton object return dbObject; ) public void getConnection() ( System.out.println("You are now connected to the database."); ) ) class Main ( public static void main(String() args) ( Database db1; // refers to the only object of Database db1= Database.getInstance(); db1.getConnection(); ) ) 

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

 Agora você está conectado ao banco de dados. 

Em nosso exemplo acima,

  • Criamos uma classe singleton Database.
  • O dbObject é um campo do tipo de classe. Isso se referirá ao objeto da classe Database.
  • O construtor privado Database()impede a criação de objetos fora da classe.
  • O método do tipo de classe estática getInstance()retorna a instância da classe para o mundo externo.
  • Na classe principal, temos a variável de tipo de classe db1. Estamos chamando getInstance()usando db1 para obter o único objeto do banco de dados.
  • O método getConnection()só pode ser acessado através do objeto do Banco de Dados.
  • Como o Banco de Dados pode ter apenas um objeto, todos os clientes podem acessar o banco de dados através de uma única conexão.

É importante observar que existem apenas alguns cenários (como registro) em que singletons fazem sentido. Mesmo uma conexão de banco de dados geralmente não deve ser um singleton.

Recomendamos que você evite usar singletons completamente se não tiver certeza se deve usá-los ou não. Saiba mais: O que há de tão ruim no Singleton?

Artigos interessantes...