Quando si parla di Design Pattern non si parla altro che di una serie di soluzioni le quali vengono definite eccellenti, testate e vere. Queste soluzioni rispondono a problemi comuni con i quali gli sviluppatori, nel nostro caso i web developer, si ritrovano a dover fronteggiare ogni giorno.
I design patterns non sono regole, ma linee guida che ogni sviluppatore può adottare per risolvere, in maniera sicura e testata, dei problemi.
Sebbene i design patterns possano tradursi anche in codice procedurale, la sua massima espressione la si ha con la programmazione ad oggetti.
Oggi prenderemo in esame il Singleton, un design pattern semplice da implementare.
Il Singleton è forse il design patter più semplice da implementare. Lo scopo che ha è quello di provvedere l’accesso ad una risorsa senza però creare duplicati dello stesso accesso. Per fare un esempio, nella stragrande maggioranza dei casi, quando creiamo un applicazione che si interfaccia ad un database, basterebbe che una singola connessione fosse istanziata, per poi utilizzare sempre la stessa in tutti i punti del nostro script.
Col design pattern Singleton fare questo diventa molto semplice.
class DB {
private static $_singleton;
private $_connetion;
private function __construct () {
$this->_connection = mysql_connect();
}
public static function getIstance () {
if (is_null(self::$_singleton)) self::$_singleton = new DB();
return self::$_singleton;
}
}
$db = DB::getIstance();
Per l’implementazione di questo design patter, sfruttiamo al massimo le caratteristiche della programmazione ad oggetti di PHP 5.
Creiamo un costrutto privato, questo per rendere possibile la creazione dell’oggetto solo dalla classe stessa. Questo, infatti, è ciò che fa il metodo getIstance(), che verifica se la proprietà statica $_singleton è stata inizializzata. Se così fosse, non verrebbe creato un nuovo oggetto, ma semplicemente riproposto quello già istanziato; viceversa, il metodo crea una nuova istanza oggetto.
Con il desig pattern Singleton siamo ingrado di risolvere il problema allo istanziamento di un unico oggetto, senza averne di multipli. Un problema da risolvere, come nel nostro caso, quando abbiamo la necessità di ridurre al minimo il consumo di sockets su di una risorsa che potrebbe essere appunto una connessione al database, piuttosto che ad un’altra sorgente.














