Benutzer-Werkzeuge

Webseiten-Werkzeuge


usercontent:singleton_klasse

Singleton Klasse

Eine Singleton Klasse wird nur einmal global angelegt und an mehreren Stellen im Programm genutzt. Sie eignet sich z.B. gut um einen Datenbankverbindung zu halten.

public class MySingleton {
    private static MySingleton mySingelton = null;
 
    private MySingleton(){
    }
 
    public static MySingleton getInstance(){
        if (mySingelton == null)
            mySingelton = new MySingleton();
        return mySingelton;
    }
 
    public void doSomething(){
        System.out.println("Die Methode doSometing() wurde aufgerufen.");
    }
}

Wie man sieht ist der Konstruktor privat. Dadurch kann nicht „versehendlich“ eine weitere Instanz erstellt werden. Die Instance wird ausschließlich und einmalig in der statischen Methode getInstance() erzeugt.

Der Aufruf würde dann so aussehen:

 MySingleton.getInstance().doSomething();

Hier die Thread-sichere Version

public class Singleton {
 
  // Eine (versteckte) Klassenvariable vom Typ der eigene Klasse
  private static Singleton instance;
  // Verhindere die Erzeugung des Objektes über andere Methoden
  private Singleton () {}
  // Eine Zugriffsmethode auf Klassenebene, welches dir '''einmal''' ein konkretes 
  // Objekt erzeugt und dieses zurückliefert.
  // Durch 'synchronized' wird sichergestellt dass diese Methode nur von einem Thread 
  // zu einer Zeit durchlaufen wird. Der nächste Thread erhält immer eine komplett 
  // initialisierte Instanz.
  public static synchronized Singleton getInstance () {
    if (Singleton.instance == null) {
      Singleton.instance = new Singleton ();
    }
    return Singleton.instance;
  }
}

Performante und thread-safe Implementierung

/**
 * Performante und thread-safe Implementierung des Singleton-Patterns
 */
public class Singleton {
    private static Singleton instance = new Singleton();
 
    /**
     * Default-Konstruktor, der nicht außerhalb dieser Klasse
     * aufgerufen werden kann
     */
    private Singleton() {}
 
    /**
     * Statische Methode, liefert die einzige Instanz dieser
     * Klasse zurück
     */
    public static Singleton getInstance() {
        return instance;
    }
}
usercontent/singleton_klasse.txt · Zuletzt geändert: 31/05/2014 16:28 von programmierer