Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

README.md

title Singleton Pattern in Java: Implementing Global Access Points in Java Applications
shortTitle Singleton
description Explore the Singleton Pattern in Java with our comprehensive guide. Learn how to implement efficient object management for your Java applications, ensuring optimal use of resources and easy access with examples and detailed explanations.
category Creational
language pt
tag
Gang of Four
Instantiation
Lazy initialization
Resource management

Também conhecido como

  • Single Instance

Propósito

Assegurar que a classe Java possua somente uma instância e forneça um ponto global de acesso a essa instância Singleton.

Explicação

Exemplo do Mundo Real

Uma analogia do mundo real para o padrão Singleton é um governo emitindo um passaporte. Em um país, cada cidadão pode receber apenas um passaporte válido por vez. O escritório de passaportes garante que nenhum passaporte duplicado seja emitido para a mesma pessoa. Sempre que um cidadão precisa viajar, ele deve usar este passaporte único, que serve como o identificador único e globalmente reconhecido para suas credenciais de viagem. Este acesso controlado e gerenciamento de instância exclusivo espelham como o padrão Singleton garante o gerenciamento eficiente de objetos em aplicativos Java.

Em outras palavras

Assegura que somente um objeto de classe em particular seja criado.

De acordo com a Wikipédia

Na engenharia de software, o padrão Singleton é um padrão de design de software que restringe a instanciação de uma classe a um objeto. Isso é útil quando exatamente um objeto é necessário para coordenar ações no sistema.

Exemplo Programático

Joshua Bloch, Effective Java 2nd Edition pg.18

Um tipo Enum de elemento único é a melhor maneira de implementar um Singleton

public enum EnumIvoryTower {
  INSTANCE
}

Então para usar:

    var enumIvoryTower1 = EnumIvoryTower.INSTANCE;
    var enumIvoryTower2 = EnumIvoryTower.INSTANCE;
    LOGGER.info("enumIvoryTower1={}", enumIvoryTower1);
    LOGGER.info("enumIvoryTower2={}", enumIvoryTower2);

A saída do console

enumIvoryTower1=com.iluwatar.singleton.EnumIvoryTower@1221555852
enumIvoryTower2=com.iluwatar.singleton.EnumIvoryTower@1221555852

Quando usar

Use o padrão Singleton quando

  • Deve haver exatamente uma instância de uma classe, e ela deve ser acessível aos clientes a partir de um ponto de acesso bem conhecido
  • Quando a única instância deve ser extensível por herança, e os clientes devem ser capazes de usar uma instância estendida sem modificar seu código

Aplicações do mundo real

Benefícios e desafios do padrão Singleton

Benefícios:

  • Acesso controlado à instância única.
  • Poluição reduzida do namespace.
  • Permite refinamento de operações e representação.
  • Permite um número variável de instâncias (se desejado mais de uma).
  • Mais flexível do que operações de classe.

Desafios:

  • Difícil de testar devido ao estado global.
  • Gerenciamento de ciclo de vida potencialmente mais complexo.
  • Pode introduzir gargalos se usado em um contexto concorrente sem sincronização cuidadosa.

Outros Padrōes de Projeto Relacionados

  • Abstract Factory: Geralmente usado para garantir que uma classe tenha apenas uma instância.
  • Factory Method: O padrão Singleton pode ser implementado usando o padrāo Factory para encapsular a lógica de criação.
  • Prototype: Evita a necessidade de criar instâncias, pode ser usado em conjunto com o Singleton para gerenciar instâncias únicas.

Referências e Créditos