ComiaTip Singletonin tekeminen enumeraatiolla


Singleton enumeraatiolla

Kirjoittanut J-P Julkaistu 5.2.2009

Java 1.5 esitteli Javaan enumeraatiot. Muiden hienojen rakenteiden ohella enumeraatiolla voidaan toteuttaa Singleton-suunnittelumalli eli luokka, josta on olemassa ainoastaan yksi instanssi.

MunSingletoni.java:

public enum MunSingletoni { INSTANSSI; private String viesti = "Hei Maailma!"; public void setViesti(String viesti) { this.viesti=viesti; } public void tulostaViesti() { System.out.println(viesti); } }

KaytaSingletonia.java:

public class KaytaSingletonia { public static void main(String[] argumentit) { MunSingletoni.INSTANSSI.tulostaViesti(); MunSingletoni.INSTANSSI.setViesti( "Singleton instanssi sanoo Moro!"); MunSingletoni.INSTANSSI.tulostaViesti(); } }

Jos haluat, voit lisätä singleton enumeraation myös staattisen getInstance() -metodin, jolloin singleton-malli on myöhemmin ieman helpompi purkaa, mikäli se on tarpeen.

public static MunSingletoni getInstance(){ return INSTANSSI; }

Myönnettäköön, että esimerkki ei ole paras mahdollinen singletonin käyttötapa. Mutta se esittää selkeästi miten singletonin voi tehdä enumeraatiolla, joka jo Javan määrittelyjen perusteella takaa, että luokasta on olemassa vain ja ainoastaan yksi instanssi. Ja sehän tässä nimenomaan olikin tarkoituksena.