Guardiamo un esempio di Singleton in Java. Il codice presenta un metodo opzionale : invalidate
che invalida la prima istanza della classe, forzandone la creazione di una nuova istanza nel successivo accesso alla classe.
public class Singleton {
private static Singleton instance;
public static Singleton getInstance(){
if (instance == null) instance = new Singleton();
return instance;
}
public static void invalidate(){
instance = null;
// si possono invalidare eventuali altre proprietà della classe
}
private Singleton(){
// qui si eseguono le eventuali operazioni di inizializzazione delle informazioni necessarie
}
}
Ecco un implementazione alternativa in PHP.
/**
* Semplice implementazione del design pattern singleton.
* Data la struttura sintattica di PHP non è possibile sfruttare l'ereditarietà
* per poter riutilizzare il pattern, se non utilizzando piccoli stratagemmi sintattici.
*/
class MySingleton
{
/**
* La variabile statica privata che conterrà l'istanza univoca
* della nostra classe.
*/
private static $instance = null;
/**
* Il costruttore in cui ci occuperemo di inizializzare la nostra
* classe. E' opportuno specificarlo come privato in modo che venga
* visualizzato automaticamente un errore dall'interprete se si cerca
* di istanziare la classe direttamente.
*/
private function __construct()
{
// ... codice ...
}
/**
* Il metodo statico che si occupa di restituire l'istanza univoca della classe.
* per facilitare il riutilizzo del codice in altre situazioni, si frutta la
* costante __CLASS__ che viene valutata automaticamente dall'interprete con il
* nome della classe corrente (ricordo che "new $variabile" crea un'istanza della classe
* il cui nome è specificato come stringa all'interno di $variabile)
*/
public static function getInstance()
{
if(self::$instance == null)
{
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
}
Nessun commento:
Posta un commento