Singleton beispiele

Barney90

Grünschnabel
Hallo Leute,

Ich bin ein Java Neuling und habe mich mit Singletons befasst. Es ist ja so das nur eine Instanz/Objekt erzeugt werden kann damit die dementsprechende Methode im Singleton ausgeführt werden kann. Bei einem Singleton das die Datenbank verwaltet macht das ja auch Sinn, denn nehmen wir an es wäre möglich mehrere Instanzen anzulegen und die gewissen operation auszuführen würde es ja ein Chaos in der Datenbank geben wie z.b. Die eine Klasse einen Datensatz löscht und die andere Klasse will gleichzeitig drauf zugreifen usw. Aber nun habe ich bei Wikipedia ein Beispiel gesehen das ein Singleton verwendet wird um Druckauftäge in einem Puffer zu speichern die später dem Drucker übermittelt wird. Was ist an dem Beispiel so schlimm, mal kein Singleton zu verwenden. Ich meine es ist doch egal ob mehrere Klassen gleichzeitig die Druckaufträge in den Puffer schreibt oder ist da ein Singleton sinnlos. Wie sieht ihr das ?


mfg
barney90
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

hier geht es darum, dass es genau einen Puffer für den Drucker gibt und nicht mehrere. Somit ist gewährleistet, dass die Aufträge genau in der Reihenfolge abgearbeitet werden, in der sie abgeschickt wurden. Zusätzlich kann hier auch wie bei dem Datenbankbeispiel sicher gestellt werden, dass immer nur ein Auftrag an den Drucker gesendet wird und der nächste warten muss, bis der vorherige fertig ist.

Grüsse,
BK
 

ComFreek

Mod | @comfreek
Moderator
Die eine Klasse einen Datensatz löscht und die andere Klasse will gleichzeitig drauf zugreifen usw.
Dafür gibt es Transaktionen.

Das Singleton ist kein gerade gutes Designmuster, da es mitunter einer globalen Variable gleicht. Besser wäre es, Abhängigkeiten Methoden oder Klassen als Parameter zu übergeben.

Wie würdest du ein Programmstück, welches ein Singleton nutzt, mit Unit Tests testen? Du kannst in solchen Fällen kein Mock-Objekt als Abhängigkeit einfach an die Methode oder den Klassenkonstruktor weiter reichen.
 

sheel

I love Asm
Noch ein Grund für Transaktionen: Wenn man bedenkt, dass mehrere Programme gleichzeitig auf die DB zugreifen und darin herumändern können, macht eine (nur) programminterne Synchronisation keinen Sinn.