Hostylez Reveal yer trve dark attitude :3


19
Nov/09
2

Une autre manière de faire un singleton en Java

Je sais, le singleton nuit gravement à la santé de votre code comme certains disent. Mais pour les besoins de ma boîte, je suis en train de développer une nouvelle version de l'API de connection à notre base de donnée préférée (XediX1) et pour des raisons de performance le singleton est préférable.

Habituellement tel qu'on nous l'apprends, ça ressemble plus à ça :

public class MySingleton {
	private static MySingleton instance;
 
	private MySingleton(){}
 
	private static MySingleton getInstance(){
		if(MySingleton.instance == null)
			MySingleton.instance = new Singleton();
		return MySingleton.instance;
	}
}

En Java il existe un autre moyen plus propre et plus adapté je trouve :

public class MyNewSingleton {
	private static MyNewSingleton instance;
 
	static {
		MyNewSingleton.instance = new Singleton();
	}
 
	private MyNewSingleton(){}
 
	private static MyNewSingleton getInstance(){
		return MyNewSingleton.instance;
	}
}

Lors de l'appel d'une méthode de la classe MyNewSingleton, la machine virtuelle va d'abord s'occuper du code placé à l'intérieur de l'instruction static {} puis va executer le code de la méthode appelé. Ce n'est pas un énorme changement, mais ça évite une condition qui ne m'avait jamais branché (je n'aime malheureusement pas les conditions, dommage pour un développeur).

  1. Base de donnée XML native développée par le CEA, qui fera certainement l'objet d'un prochain article []
Filed under: Dev