~Java4Beginners~
~Java4Beginners~

Singleton

Bei Singleton handelt es sich um ein Erzeugungsmuster, welches sicherstellt, dass von einer Klasse genau 1 Objkekt existieren kann.

Üblicherweise wird der Singleton global verfügbar gemacht.

UML-Ansicht



Beispielprgramm nur Singleton


package singletonmuster;

/**
 * Beispiel für das Entwurfsmuster Singleton
 * @author Markus Badzura
 */
public class Singleton 
{
    // Beispiel nur der Singletonklasse laut UML-Klassendiagramm
    
    // Klassenvariable vom Typ Singelton erstellen
    private static final Singleton SINGEL = new Singleton();
    
    // Konstruktur mit Zugriffszertifizierer private, damit von ausserhalb
    // kein Objekt erstellt werden kann.
    
    private Singleton(){}
    
    // Getter-Methode, um das EINZIGARTIGE Singleton - Objekt zu erhalten
    
    public static Singleton getInstance()
    {
        return SINGEL;
    } 
}
Die Frage ist natürlich, wie wir dieses Entwurfsmuster praktisch anwenden können.

Beispielprogramm Lottospieler

Um das Singleton im praktischen Einsatz zu sehen, erstellen wir eine kleine Anwendung. Es gibt verschiedene Lottospieler, welche am Samstagslotto mitspielen. Es wird davon ausgegangen, dass bei der vorherigen Ziehung alle Einzahlungen verspielt wurden und wir als Gesamteinsatz für das Samstaglotto 0,00 Euro haben. Das heisst, das jeder Spieleinsatz in die Gewinnsumme für das Samstagslotto geht.

Singletonklasse gesamteinsatzLotto


package singletonmuster;

/**
 * Beispiel Singleton - Entwurfsmuster
 * @author Markus Badzura
 */
public class gesamteinsatzLotto 

{
    private static final gesamteinsatzLotto GES_EINSATZ = new gesamteinsatzLotto();
    private double einsatz = 0;

    private gesamteinsatzLotto(){}
        
    public static gesamteinsatzLotto getInstance()
    {
        return GES_EINSATZ;
    } 
    
    public void setEinsatz(double einsatz)
    {
        this.einsatz += einsatz;
    }
    
    public double getSumme()
    {
        return einsatz;
    }
}

Klasse Lottospieler


package singletonmuster;

/**
 * Beispiel Singleton - Entwurfsmuster
 * @author Markus Badzura
 */
public class Lottospieler 
{
    private String name;
    private double einsatz;
    Lottospieler(String name, double einsatz)
    {
        this.name = name;
        this.einsatz = einsatz;
    }
    
    public void spielen()
    {
        gesamteinsatzLotto d = gesamteinsatzLotto.getInstance();
        d.setEinsatz(einsatz);
    }
}

Einstiegsklasse Samstagslotto


package singletonmuster;

/**
 * Beispiel Singleton - Entwurfsmuster
 * @author Markus Badzura
 */
public class Samstagslotto 
{
    public static void main(String[] args) 
    {
        gesamteinsatzLotto lotto = gesamteinsatzLotto.getInstance();
        System.out.println("Gesamteinsatz aktuell: "+lotto.getSumme());
        Lottospieler markus = new Lottospieler("Markus",22.13);
        markus.spielen();
        System.out.println("Gesamteinsatz nach Markus: "+lotto.getSumme());
        Lottospieler heinz = new Lottospieler("Heinz",7.87);
        heinz.spielen();
        System.out.println("Gesamteinsatz nach Heinz: "+lotto.getSumme());
    }
}

GitHub

Auch dieses Entwurfsmuster hab ich auf GitHub veröffentlicht.

Singleton auf GitHub
nach oben Java4Beginners -- Seitenversion 1.01 -- Stand: 2017-05-19