JAVA,  Programmazione

Java design patterns: il Singleton

Oggi iniziamo con una sorta di rubrica dedicata ai design patterns relativamente alla programmazione Java, faccio questa precisazione visto che un design pattern come recita anche Wikipedia è

un modo formale di documentare una soluzione a un problema di progettazione in un particolare campo di competenza“.

Infatti i design patterns possono essere applicati all’architettura così come allo sviluppo del software, visto il mio lavoro e la mia dedizione a Java, ho deciso di scrivere una serie di articoli sui patterns che preferisco.

Un software design pattern è una soluzione generale a un problema comune nella progettazione del software, è una descrizione o un template che indica come risolvere un problema, che può essere usato in differenti situazioni.

Un design pattern object-oriented tipicamente mostra le relazione e le interazioni tra classi o oggetti, senza specificare le classi finali dell’applicazione o gli oggetti che sono coinvolti.

Il Singleton assicura che una classe abbia solo una istanza, fornendo un unico punto di accesso ad essa. Questo tipo di classi possono essere utilizzate nei casi in cui un solo oggetto è necessario a coordinare un sistema o un sottosistema applicativo.

Implementazione

L’implementazione del singleton pattern deve soddisfare i principi della singola istanza e dell’accesso globale, richiede un meccanismo di accesso ad un membro della classe senza la creazione della classe stessa ed un meccanismo per mantenere il valore dei membri della classe tra gli oggetti della classe.

Facciamo un esempio pratico per comprendere meglio i concetti, il pattern singleton è implementato creando una classe con un metodo che crea una nuova istanza della classe se questa ancora non esiste, se così non fosse il metodo semplicemente ritornerà l’istanza preesistente. Per essere sicuri che l’oggetto non possa essere istanziato in altre maniere, il costruttore della classe viene dichiarato protected (non private perchè negli unit test o nel “riuso” potrebbe essere necessario dover accedere al costruttore).

vediamo una esempio di classe che implementa il “Singleton”:

public class MainController {
   private static MainController INSTANCE;

   /* Il costruttore private previene la possibilità di
      istanziare l'oggetto da altre classi */
   private MainController() {
   }

   public static MainController getInstance() {
     if (INSTANCE == null) {
        INSTANCE = new MainController();
     }
     return INSTANCE;
   }
}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *