Einsatz

Das "Singleton Pattern" soll sicherstellen, dass von einer Klasse nur ein einzelnes Objekt Inszanziert werden kann.

Beispiele

  • Eine zentrale Klasse fü den Zugfriff auf Datenbanken

  • Druckspooler zur Bearbeitung von Druckaufträgen

  • Verwaltung von globalen Einstellungen / Variablen

Merkmale / Elemente

  • Der Konstruktor / die Konstruktoren sind als private deklariert.

  • Die Klasse hat eine statische Variable auf das Singleton

  • Die Klasse stellt eine statische Methode bereit um eine Referenz auf das Singleton zu erhalten.

Klassendiagramm

Die folgende Abbildung zeigt die Darstellung eines Singleton im Klassendiagramm der UML:

Klassendiagramm Singleton

Java - Beispiel

Das nachfolgende Beispiel zeigt die Standardimplementierung in Java wobei das Singleton bei der ersten Verwendung erzeugt wird. Die Methode getInstance() muss synchronized deklariert werden, damit nicht mehrere Threads diese Methode parallel aufrufen und mehrere Objekte des Singletons entstehen.

public class Singleton {
  private static Singleton singleton_1;

  private Singleton(){}

  public static synchronized Singleton getInstance(){
    if (singleton_1 == null){
      singleton_1 = new Singleton();
    }
    return singleton_1;
  }
}
itmapa.de - X2H V 0.20

Eine weitere Möglichkeit der Implementierung ist die Instanzierung des Singleton beim laden der Klasse. Spielt der Zeitpunkt der Instanzierung keine Rolle ist diese Variante vorzuziehen, da unter anderem die Deklaration mit synchronized nicht erforderlich ist.

public class Singleton2 {
  private static Singleton2 singleton2 = new Singleton2();
  
  private Singleton2(){}
  
  public static Singleton2 getInstance(){
    return singleton2;
  }
}
itmapa.de - X2H V 0.20

Singleton und Scala

Singletons sind in Scala Bestandteil der Sprache. Eine aufwendige Konstruktion von Singletons entfällt. Ein Scala Singleton entsteht dadurch das eine Klasse mit dem Scala Schlüsselwort object eingeleitet wird. Durch die Verwendung des Schlüsselwortes object wird in Scala sichergestellt, dass es nur eine Instanz dieser Klasse gibt.

Das nachfolgende Scala Beispiel zeigt die Definition eines Singleton Objektes in Scala.

object ScalaSingleton{
  def value1 = 45
  def increase(x : Int) : Int = x + 1 
}
itmapa.de - X2H V 0.20

Pattern Links - itmapa.de

de.wikipedia.org
Singleton (Einzelstück)
http://de.wikipedia.org/wiki/Einzelst%C3%BCck_(Entwurfsmuster)

Jens Günther
http://wwwswt.informatik.uni-rostock.de
Singleton
http://wwwswt.informatik.uni-rostock.de/deutsch/Infothek/Entwurfsmuster/patterns/Singleton/index.html

THESERVERSIDE.DE
Singleton Pattern in Java
http://www.theserverside.de/singleton-pattern-in-java/