Programmazione:Java/Singleton with interface

Da WikiSitech.
Vai alla navigazioneVai alla ricerca

<< Back to Java

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 il codice che accede al singleton diventa abbastanza esteso, necessariamente riduce la fattibilità di refactoring, dovendo modificare ogni singolo punto in cui si accede all'oggetto.

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.