Zum Inhalt springen

Singleton (Entwurfsmuster)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 21. Februar 2005 um 18:48 Uhr durch Thomasv (Diskussion | Beiträge) (==Verwandte Entwurfsmuster==). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Das Singleton (Einzelstück) ist ein in der Softwareentwicklung eingesetztes Entwurfsmuster und gehört zur Kategorie der Erzeugungsmuster (Creational Patterns). Es stellt sicher, dass zu einer Klasse nur genau ein Objekt erzeugt werden kann und ermöglicht einen globalen Zugriff auf dieses Objekt. Das Muster gehört mit dem Iterator-Entwurfsmuster zu den bekanntesten der von der so genannten Viererbande publizierten Muster.

Verwendung

Das Singleton findet Verwendung, wenn

  • nur ein Objekt zu einer Klasse existieren darf und ein einfacher Zugriff auf dieses Objekt benötigt wird oder
  • wenn das einzige Objekt durch Unterklassenbildung spezialisiert werden soll.

Anwendungsbeispiele sind:

  • Ein zentrales Protokoll-Objekt, das Ausgaben in eine Datei schreibt.
  • Druckaufträge, die zu einem Drucker gesendet werden, sollten nur in einen einzigen Puffer geschrieben werden.

UML-Diagramm

Datei:Einzelstueck.png

Akteure

  • Einzelstueck
    • erzeugt und verwaltet einziges Objekt zu einer Klasse
    • bietet globalen Zugriff auf dieses Objekt über eine Instanzoperation
    • die Instanzoperation ist eine Klassenmethode, d.h. statisch gebunden

Vorteile

  • Das Muster bietet eine Verbesserung gegenüber globalen Variablen.
  • Das Einzelstück kann durch Unterklassenbildung spezialisiert werden.
  • Sollten später mehrere Objekte benötigt werden, ist eine Änderung leicht möglich.

Nachteile

Beispiele

Implementierung in Java

Die Erstellung des einmalig existierenden Objekts wird folgendermaßen erreicht:

  • Der Konstruktor der Singleton-Klasse ist privat. So ist es nicht möglich, ein weiteres Objekt dieser Klasse zu erzeugen.
  • Als Ersatz wird eine neue Zugriffsmethode angelegt, die eine Referenz auf das einzige Objekt zurückgeben kann.
  • Die Variable, in der die Klasse gespeichert wird, erhält den Modifikator "statisch".
 public class SingletonPattern {
   
// Privates Klassenattribut wird mit null initialisiert. private static SingletonPattern instance = null;
// Konstruktor ist privat. private SingletonPattern () { }
// Statische Methode "singleton()" liefert das einzige Exemplar der Klasse // zurück. Wenn noch nicht vorhanden (instance==null), erzeuge es. public static synchronized SingletonPattern singleton() { if (instance == null) { instance = new SingletonPattern (); } return instance; } }

Verwandte Entwurfsmuster

Singletons werden oft verwendet, um abstrakte Fabriken, Erbauer oder Prototypen zu implementieren.