Singleton Pattern Problemstellung
16. März 2009 Roland
- Design Pattern Einführung
- Singleton Pattern Problemstellung
- Singleton Pattern Deklaration
- Singleton Pattern Einsatzbereiche
- Facade Pattern Problemstellung
- Asynchrone Kommunikation mit JavaScript und Facade Pattern
- Wann wird das Fassaden Pattern zum Antipattern?
- Observer Pattern Problemstellung
- Observer Pattern Deklaration
- Observer Pattern als Antipattern
- Adapter Pattern Problemstellung
- Adapter Pattern Deklaration
- Adapter Pattern Einsatzbereiche
- Adapter Pattern als Antipattern
Häufig benötigst du in deinen Programmen exakt eine Instanz von einem Objekt. Wozu das?
Stell dir folgendes Szenario vor:
Du willst ein Programm schreiben bei dem verschiedene Modelle beteiligt sind. Jedes dieser Modelle verwaltet beispielsweise Personenstammdaten.
Die Modelle müssen auf die Datenbank zugreifen um dort ihre Personenstammdaten zu laden. Die Datenbank Credentials (User, Password, Hostname usw.) werden in Objekten der Klasse Properties gehalten. Das bedeutet, dass wir die Konfigurationsinformationen an einem Ort speichern wollen. Das bringt den Vorteil, dass wir im Fall einer Datenbankänderung nur an einer Stelle den neuen Wert eintragen müssen.
Eine Property Klasse könnte also so aussehen:

Die Daten DBUser, DBHost und DBPassword sollten im gesamten System wirklich nur ein einziges Mal vorhanden sein. Vielleicht ändert sich das Property Objekt irgendwann. Beispielsweise könnte von dieser Klasse ein Property Objekt angelegt werden, und der DBUser neu gesetzt werden. Wenn andere Programmteile auf andere Property Objekte zugreifen würden, hätten wir dann dort andere Werte für DBUser. Unser System würde nicht mehr funktionieren.
Programmieren ohne Singleton
Wir generieren jetzt ohne Singleton zwei Objekte von unseren Modellen (Modell1 und Modell2).
Diese beiden Objekte benötigen jeweils die Datenbankinformationen und erzeugen jeweils ein Properties Objekt indem sie den new() Operator verwenden. Sie legen somit zwei eigenständige Properties Objekte an.
Ich habe die beiden Objekte mit FirstPropertyModel und SecondPropertyModel bezeichnet.
In PHP würde z.B. im Konstruktor des Modell1 folgender Eintrag zu finden sein:
-
__construct(){
-
$this->firstPropertyModel = new Properties();
-
}
Für Modell2 ist folgender Code angelegt:
-
__construct(){
-
$this->secondPropertyModel = new Properties();
-
}
Die Modelle haben ihre eigenen Instanzen der Properties Klasse.
Als letztes werden die Inhalte der Properties Objekte verändert. Beispielsweise wurde der DB User ursprünglich mit “Alfred” angegeben. Während des Programmlaufs wird nun im SecondPropertyModel der DB User auf “Gudrun” verändert.
Wir haben aber immer noch nur eine Datenbank und einen Datenbankuser. Unser Modell1 kann nicht mehr auf die Datenbank zugreifen, da wir hier eine nicht aktuelle Information im Properties Objekt hinterlegt haben.

Besser wäre es, wenn Modell1 und Modell2 nur ein einziges PropertyModell zur Verfügung gestellt bekommen:

Wenn wir also erreichen, dass nur eine einzige Instanz von PropertyModel vorhanden ist, dann können wir sicherstellen, dass alle Objekte nur auf diese Daten zugreifen.
Hier hilft das Singleton Pattern.
Im Singleton Pattern wird immer nur exakt ein Objekt einer Klasse im gesamten System gehalten.
Der Beitrag wurde
am Montag, den 16. März 2009 um 08:01 Uhr veröffentlicht
und wurde unter Design Pattern abgelegt.
Kurzlink: http://www.baldenhofer.eu/blog/?p=519
Dir gefiel der Artikel? Dann abonniere doch den RSS Feed![]()
Du kannst die Kommentare zu diesem Eintrag durch den RSS 2.0 Feed verfolgen. Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.








