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