Dirty Singleton Pattern
Für die Programmierung meines MVC-Framework habe ich mich mal mit dem Thema Entwurfsmuster beschäftigt.
Für den Aufbau einer MySQL Datenbank Klasse habe ich mich nun dazu entschieden ein Singleton-Pattern einzusetzen. Jedoch ein solches welches mir dennoch erlaubt für jede Datenbank ein einzelnes Objekt zu erstellen. Ist zwar etwas dirty aber es erfüllt seinen Zweck
class senf_database_mysql{
/**
* Returns instances
*
* @access public
* @return object
*/
public static function returnIns($database){
if (!isset(self::$ins[$database])){
self::$ins[$database] = new senf_database_mysql($database);
}
return self::$ins[$database];
}
}
Mit dem Aufruf der statischen Funktion senf_database_mysql::returnIns(‘datenbank’) wird überprüft ob im array $ins[] bereit ein objekt zur entsprechenden Datenbank besteht. Ist das nicht der Fall so wird ein neues Objekt erstellt und in $ins[] abgelegt. Bei jedem weiteren Zugriff auf eine Datenbank, zu welcher bereits ein Objekt besteht, wir die bereits bestehende Instanz zurückgeliefert.








Wenn du deiner Klasse jetzt noch folgende Zeilen hinzufügst, ist der Code gleich nicht mehr so “dirty”:
private static $ins = array();
private __construct(){}
private __clone(){}
Mit “private static $ins = array();” erzeugst du ein Array, in dem du deine Instanzen ablegst.
Die Funktion “private __construct(){}” stellt sicher, dass von außen keine Instanz der Klasse erstellt werden kann. Zu guter letzt stellt die Funktion “private __clone(){}” sicher, dass auch keine Kopie einer bestehenden Instanz erzeugt werden kann.
Mit diesen drei Zeilen sieht dein Code gleich deutlich hübscher aus.