Singleton Pattern

Definição

Assegura que existe uma e só uma instância de uma classe, disponibilizando o acesso global ao seu objecto.

Utilização

Aplicações onde é necessário somente uma instância da classe. É bastante utilizado em ligações a base de dados.

Classes

  • O construtor é privado, impossibilitando a instanciação por parte de outras classes.

public class Singleton {
    private static Singleton instance = new Singleton();
    private int numberOfInstances = 0;

    private Singleton(){
        ++numberOfInstances;
    }

    public static Singleton getInstance() {
        return instance;
    }

    public int getNumberOfInstances(){
        return numberOfInstances;
    }

    public void message(String txt) {
        System.out.println("Message from " + txt);
    }
}

 

Outra possível abordagem, contudo menos utilizada, uma vez que num ambiente multithreading, poderá levar a problemas de concorrência.

public class Singleton {
    private static Singleton instance;
    private int numberOfInstances = 0;

    private Singleton(){
        ++numberOfInstances;
    }

    public static Singleton getInstance() {
        if(instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

    public int getNumberOfInstances(){
        return numberOfInstances;
    }

    public void message(String txt) {
        System.out.println("Message from " + txt);
    }
}

 

 

public class Demo {
    public static void main(String[] args) {
        Singleton firstObject = Singleton.getInstance();
        System.out.println(firstObject.getNumberOfInstances());
        firstObject.message("FirstObject");

        Singleton secondObject = Singleton.getInstance();
        System.out.println(secondObject.getNumberOfInstances());
        secondObject.message("SecondObject");
    }
}

 

OUTPUT:

Number of Instances: 1
Message from FirstObject
Number of Instances: 1
Message from SecondObject