A programação de um padrão Singleton na linguagem java usual...

Próximas questões
Com base no mesmo assunto
Q48302 Arquitetura de Software
Julgue os itens que se seguem a respeito dos padrões de desenho e outras técnicas para reúso de software.

A programação de um padrão Singleton na linguagem java usualmente demanda que o método getInstance seja declarado como de instância.
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é: Errado (E).

Vamos entender por que a alternativa está incorreta:

O padrão Singleton é um dos Design Patterns mais utilizados na programação orientada a objetos, especialmente em Java. Seu objetivo é garantir que uma classe tenha apenas uma instância e fornecer um ponto global de acesso a essa instância. Para implementar o Singleton em Java, é usual declarar um método chamado getInstance, que é responsável por retornar a única instância da classe.

Porém, a questão menciona que o método getInstance deve ser declarado como um método de instância, o que é incorreto. Na verdade, o método getInstance deve ser declarado como um método estático (static). Isso porque métodos de instância exigem que o objeto já exista para serem chamados, o que contraria o propósito do Singleton, que é criar e gerenciar uma única instância de forma controlada.

Vamos detalhar como seria uma implementação típica de Singleton em Java:

public class Singleton {
    // Instância única da classe, inicializada de forma preguiçosa
    private static Singleton instance;
    
    // Construtor privado para evitar instanciamento externo
    private Singleton() {}
    
    // Método estático que retorna a única instância da classe
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

Observe que:

  • A instância única da classe é armazenada em uma variável estática (private static Singleton instance;).
  • O construtor da classe é privado para evitar que a classe seja instanciada diretamente.
  • O método getInstance é declarado como estático (public static synchronized Singleton getInstance()), permitindo que seja chamado sem a necessidade de uma instância da classe.

Resumo: O método getInstance deve ser estático, e a questão erra ao afirmar que ele deve ser de instância. Portanto, a resposta correta é Errado (E).

Espero que esta explicação tenha esclarecido o conceito de Singleton e por que a alternativa está incorreta. Se tiver mais dúvidas, fique à vontade para perguntar!

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

getInstance() deve ser um método de classe (static)

Complementando, para ter acesso ao objeto, será executado algo como: 

MinhaSingleton A,B;  
A=MinhaSingleton.getInstance(); 
B=MinhaSingleton.getInstance(); 

=>A e B referenciam o msm objeto;

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo