Il pattern Singleton in VB.NET

In rete circolano diverse soluzioni per implementare in VB.NET il pattern Singleton, che ha lo scopo di garantire che, di una determinata classe, sia creata una ed una sola istanza e che questa sia accessibile globalmente. Qui presento l’implementazione di Evgeniy Sukhikh (vedi riferimenti).

Nella soluzione di Evgeniy, la classe presenta tre elementi fondamentali: la ridefinizione del costruttore, una proprietà che espone un’istanza della classe e – all’interno di quest’ultima – la variabile che venga restituita dalla proprietà (no, non abbiamo sconfinato in C#, casomai vi fosse sorto il dubbio). Vediamo l’esempio e poi discutiamo i tre elementi.

Public Class MySingleton
     Private Sub New()
     End Sub

     Public Shared ReadOnly Property GetInstance As Singleton
         Get
             Static instance As Singleton = New MySingleton
             Return instance

         End Get

     End Property

 End Class

La prima cosa che salta all’occhio (o dovrebbe) è che il costruttore è stato definito con accesso Private; in questo modo si impedisce di implementare la classe… al di fuori di sé stessa. Un attimo di pazienza e tutto sarà più chiaro.

Poi notiamo che è stata definita una proprietà ReadOnly e soprattutto Shared (condivisa); per chi non lo sapesse o lo ricordasse, un membro Shared viene condiviso tra tutte le istanze di quella classe. Nel nostro caso poi, l’istanza comunque potrà essere una sola. In questo caso la proprietà GetInstance restituisce un oggetto definito di classe MySingleton. Va da sé che GetInstance e MySingleton sono nomi da me arbitrariamente attribuiti.

A garantire l’univocità dell’istanza infine contribuisce infine la variabile instance (nome ancora arbitrario) all’interno della proprietà, sempre di tipo MySingleton, definita come Static (statica). La parola chiave Static, che può essere applicata solo a variabili locali ad un procedura o ad un blocco all’interno della procedura, fa sì che la variabile non cessi di esistere con la chiusura del blocco di codice nel quale è stata definita, ma soprattutto non venga reinizializzata qualora l’esecuzione ritornasse entro quel blocco di codice.

La diretta conseguenza dell’uso di una variabile Static come valore di ritorno di una proprietà ReadOnly e Shared è che esisterà una ed una sola istanza della classe MySingleton all’interno dell’intera applicazione.

Riferimenti

Lascia un commento

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

*