« »

Singleton Pattern Problemstellung

16. März 2009 Roland

Dieser Artikel ist Teil 2 von 14 der Artikelserie Design Pattern

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:
Beispiel einer Property Klasse

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:

protected $firstPropertyModel;
  1. __construct(){
  2.     $this->firstPropertyModel = new Properties();
  3. }

Für Modell2 ist folgender Code angelegt:

protected $secondPropertyModel;
  1. __construct(){
  2.     $this->secondPropertyModel = new Properties();
  3. }

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.
Beispiel mit mehr als einem Property Modell
Besser wäre es, wenn Modell1 und Modell2 nur ein einziges PropertyModell zur Verfügung gestellt bekommen:
Beispiel mit nur einem Property Modell

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.

Merken und weiterempfehlen Diese Icons verlinken auf Bookmark Dienste bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • Technorati
  • Wikio DE
  • Webnews
  • MisterWong
  • Y!GG
  • Digg
  • del.icio.us

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 Feedrss

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.

...deine Chance den ersten Kommentar zu schreiben... ;-)

Schreibe mir

zum Seitenanfang