Singleton sucks
Geschrieben von Peter Rother • Mittwoch, 25. November 2009 • Kategorie: Design PatternSo könnte der Titel dieses Beitrags heißen, wenn ich das Singleton Pattern nicht doch mögen würde. Wie sich aber in der letzten Zeit herausgestellt hat, zählt es bald nicht mehr zu den Design Patterns. Ich hatte zu dem Thema vor ein paar Wochen schon eine Diskussion mit Kore Nordmann. Er vertrat den Standpunkt, dass Singelton ein Anti - Pattern darstellt, ich vertrat meine Meinung, dass Singleton doch kein Anti – Pattern sei und wie sinnvoll es doch zu nutzen sei.
Da ich mir aber doch einiges annehme, was mir von den Jungs der PHP User Group Dortmund erzählt wird, machte ich mich doch ein wenig schlau darüber, was mir erzählt wurde. Die Meinungen zu dem Thema Singelton und Design Pattern gehen doch stark auseinander. Ich bin aber dann auch zu dem Entschluß gekommen, dass der ein Einsatz von Singleton doch ziemlich eingeschränkt ist. Den letzten Stoß in diese Richtung gab mir Cal Evans bei seinem Design Pattern Talk auf der International PHP Conference in Karlsruhe. Wie sich auch hier herausstellte, wird das Singleton in der nächsten Ausgabe der Gang of Four nicht mehr mit aufgeführt. Damit es aber nicht ganz aus dem Gedächtnis der Leute verschwindet und alle diese Struktur einmal zu Gesicht bekommen, habe ich mich dazu entschlossen, dass „Pattern“ hier einmal vorzustellen.
Singelton verfolgt den Ansatz, zu jeder Zeit im Programmablauf von einem Objekt immer nur eine Instanz zu erstellen. Bei einem Aufruf der Klasse die meistens durch den Aufruf einer
Statischen Methode getInstance() erfolgt, wird immer eine Instanz der eigenen Klasse zurückgegeben. Der Konstruktor der Klasse wird hierbei als private deklariert, damit die Klasse nicht über eine normale Instanz gebildet werden kann.
Das Grundgerüst der Klasse sieht meistens folgendermaßen aus:
class mySingeltonClass
{
private static $instance = false;
private function __construct(){}
public static function getInstance()
{
if( self::$instance === false ) {
self::$instance = new self;
}
return self::$instance;
}
}
Das ist auch schon alles bei einem Singleton. Es wird in der statischen Methode getInstance() geprüft, ob bereits eine Instanz der Klasse existiert, sollte dies nicht der Fall sein, wird eine Instanz der Klasse gebildet. In jedem Fall wird eine Instanz der Klasse zurück gegeben und mit dieser wird durchgehend gearbeitet.
In welchem Fall ist ein Singleton den nun nutzbar?
Generell besteht die Meinung, dass ein Singleton im Bereich einer Konfigurations Klasse zu nutzen sei. Ich würde es vielleicht noch im Bereich von Session und Cookie Klassen nutzen, da hier in den meisten Fällen auch eine einzige Instanz ausreicht. Die Meinungen werden hier mit Sicherheit auch weiter auseinander gehen und jeder sollte sich hierzu seine eigenen Gedanken machen. Was zu beachten sein sollte ist, dass „Pattern“ nicht zu exzessiv zu nutzen.
An dieser Stelle noch einmal einen Dank an Kore für den Schubser in die richtige Richtung.
Tags für diesen Artikel: design pattern




2 Kommentare
Kommentar schreiben