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