Warning: strpos() [function.strpos]: needle is not a string or an integer in /home/opa2os.de/hosts/stockfish.de/wp-content/plugins/text-link-ads/textlinkads.php on line 176
Dirty Singleton Pattern | stockfish
Skip to content

Dirty Singleton Pattern

by admin on Februar 15th, 2009

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.

From → PHP

One Comment
  1. 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. :-P

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS