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.
1 Kommentar »
RSS feed for comments on this post. TrackBack URL
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.