Programmazione:Java/Singleton with interface

Da WikiSitech.
Versione del 26 mar 2008 alle 10:42 di Rimondini (discussione | contributi) (Nuova pagina: Generalmente i singleton vengono gestisti con la classica '''proprietà statica''' in combinazione con la funzione statica '''getInstance''': <code java> public class Singleton { p...)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazioneVai alla ricerca

Generalmente i singleton vengono gestisti con la classica proprietà statica in combinazione con la funzione statica getInstance:

public class Singleton {

  protected static Singleton self;
  
  protected Singleton() {
  }
  public static Singleton getInstance() {
     if(self == null) {
        self = new Singleton();
     }
     return self;
  }
  public void addProp(String prop, Object value) {
  }

}

Singleton.getInstance().addProp("PROP", null); // modalità d'accesso al singleton

questo codice però fa si che ogni volta che è necessario utilizzare questo oggetto vi si acceda tramite una funzione. Oltre a questo, quando però il codice che utilizza questi singleton diventa abbastanza esteso, necessariamente si riduce la fattibilità di refactoring futuri, dovendo modificare ogni singolo punto in cui si accede ai singleton.

Per ovviare a questi due problemi è possibile utilizzare un'interfaccia come entry point del singleton:

public interface ISingleton {

  ISingleton self = new Singleton();
  void addProp(String prop, Object value);   

}

public class Singleton implements ISingleton {

  public Singleton() {
  }
  public void addProp(String prop, Object value) {
  }

}

ISingleton.instance.addProp("PROP", null); // modalità d'accesso al singleton

Facendo in questo modo ci si slega completamente dall'implementazione del singleton ed è possibile in ogni momento sostituirla con un'altra implementazione. Per di più l'accesso è più veloce, dato che si accede tramite una proprietà e non un metodo.