Skip to content

3.5 Design a class using a Singleton design pattern

Weverton edited this page Sep 1, 2016 · 4 revisions

Uma das implementações corretas do padrão singleton:

// singleton classe
class SpeedSensor {
	
	// construtor privado para não deixar instanciar
	private SpeedSensor(){}
	
	// static inner class
	private static class SpeedSensorHolder {
		
		// membro static do tipo da outer class
		public static SpeedSensor ss = new SpeedSensor();
	} 
	
	// metodo static que retorna a instancia do tipo dessa classe
	public static SpeedSensor getSpeedSensor() {
		return SpeedSensorHolder.ss;
	}

}

Implementação correta do singleton:

// singleton classe
class SpeedSensor {
	
	// membro static do proprio tipo da classe
	private static SpeedSensor theInstance = new SpeedSensor();
	
	// construtor privado, para nao deixar instanciar
	private SpeedSensor(){}
	
	// metodo static que retorna o membro static 
	public static SpeedSensor getInstance(){
		return theInstance;
	}

}

Implementação não valida:

// essa class não e um singleton
class SpeedSensor {
	
	// construtor privado
	private SpeedSensor(){}
	
	// metodo static que sempre retorna uma nova instancia da propria classe
	public static SpeedSensor getInstance(){
		return new SpeedSensor();
	} 

}
Clone this wiki locally