Singleton de forma simples

Singleton é um padrão criacional que garante uma única instância para um objeto, além de fornecer um ponto de acesso global para essa instância. Em outras palavras, o objeto será criado apenas uma vez em todo o processo. Imagine que você está construindo um sistema para uma escola. Este sistema deverá viabilizar dentre outras funcionalidades, a matricula de alunos. Durante o processo de cadastro é necessário indicar o diretor vigente, que é único. Dentre várias possibilidades, o padrão Singleton tem o objetivo de solucionar este tipo de problema. Vamos implementar um código na prática sem um padrão bem definido e com o Singleton. Acompanhe: Sem Singleton Classe Diretor com construtor publico @Getter public class Diretor { private String nome; private String sobrenome; public Diretor(String nome, String sobrenome) { this.nome = nome; this.sobrenome = sobrenome; } } Sempre que diretor for instânciado, um novo objeto será criado public class Main { public static void main(String[] args) { Diretor diretor = new Diretor("josé", "Silva"); System.out.println("Nome:" + diretor.getNome()); System.out.println(diretor); Diretor outroDiretor = new Diretor("josé", "Silva"); System.out.println("Nome:" + outroDiretor.getNome()); System.out.println(outroDiretor); } } Notem que são dois objetos diferentes. Imagine que em cada ponto do sistema, um novo objeto será criado, possibilitando trocar o valor dos atributos. Isso pode causar decisões conflitantes, bugs e resultados não esperados. Por isso uma necessidade de criar um objeto único... Com Singleton Classe diretor criada, mas dessa vez com um construtor privado. Isso significa que apenas a classe diretor terá acesso ao próprio construtor. @Getter public class Diretor { private static Diretor instance; private String nome; private String sobrenome; private Diretor(String nome, String sobrenome) { this.nome = nome; this.sobrenome = sobrenome; } public static Diretor getInstance(String nome, String sobrenome) { if (instance == null) { instance = new Diretor(nome, sobrenome); } return instance; } } Agora a classe cliente deverá chamar o método getInstance(), que por sua vez devolverá sempre a mesma instância caso ela já exista. public class Main { public static void main(String[] args) { Diretor diretor = Diretor.getInstance("joão", "Silva"); System.out.println("Nome:" + diretor.getNome()); System.out.println(diretor); Diretor outroDiretor = Diretor.getInstance("fulado", "de tal"); System.out.println("Nome:" + outroDiretor.getNome()); System.out.println(outroDiretor); } } Notem que agora, o objeto retornado sempre será o mesmo, pois foi instânciado apenas uma vez.

Apr 30, 2025 - 15:56
 0
Singleton de forma simples

Singleton é um padrão criacional que garante uma única instância para um objeto, além de fornecer um ponto de acesso global para essa instância. Em outras palavras, o objeto será criado apenas uma vez em todo o processo.

Imagine que você está construindo um sistema para uma escola. Este sistema deverá viabilizar dentre outras funcionalidades, a matricula de alunos. Durante o processo de cadastro é necessário indicar o diretor vigente, que é único. Dentre várias possibilidades, o padrão Singleton tem o objetivo de solucionar este tipo de problema.

Vamos implementar um código na prática sem um padrão bem definido e com o Singleton. Acompanhe:

Sem Singleton

Classe Diretor com construtor publico

@Getter
public class Diretor {

    private String nome;
    private String sobrenome;

    public Diretor(String nome, String sobrenome) {
        this.nome = nome;
        this.sobrenome = sobrenome;
    }    
}

Sempre que diretor for instânciado, um novo objeto será criado

public class Main {
    public static void main(String[] args) {

        Diretor diretor = new Diretor("josé", "Silva");
        System.out.println("Nome:" + diretor.getNome());
        System.out.println(diretor);

        Diretor outroDiretor = new Diretor("josé", "Silva");
        System.out.println("Nome:" + outroDiretor.getNome());
        System.out.println(outroDiretor);
    }
}

Image description

Notem que são dois objetos diferentes. Imagine que em cada ponto do sistema, um novo objeto será criado, possibilitando trocar o valor dos atributos. Isso pode causar decisões conflitantes, bugs e resultados não esperados. Por isso uma necessidade de criar um objeto único...

Com Singleton

Classe diretor criada, mas dessa vez com um construtor privado. Isso significa que apenas a classe diretor terá acesso ao próprio construtor.

@Getter
public class Diretor {
    private static Diretor instance;

    private String nome;
    private String sobrenome;

    private Diretor(String nome, String sobrenome) {
       this.nome = nome;
         this.sobrenome = sobrenome;
    }

    public static Diretor getInstance(String nome, String sobrenome) {
        if (instance == null) {
            instance = new Diretor(nome, sobrenome);
        }
        return instance;
    }

}

Agora a classe cliente deverá chamar o método getInstance(), que por sua vez devolverá sempre a mesma instância caso ela já exista.

public class Main {
    public static void main(String[] args) {

        Diretor diretor = Diretor.getInstance("joão", "Silva");
        System.out.println("Nome:" + diretor.getNome());
        System.out.println(diretor);

        Diretor outroDiretor = Diretor.getInstance("fulado", "de tal");
        System.out.println("Nome:" + outroDiretor.getNome());
        System.out.println(outroDiretor);
    }
}

Image description

Notem que agora, o objeto retornado sempre será o mesmo, pois foi instânciado apenas uma vez.