Singleton Design-Pattern

singleton-Pattern ist ein Entwurfsmuster, das verhindert, dass von einer Klasse mehr als ein Objekt gebildet werden kann.

Hier wird ein kleines Beispiel für Singleton Design Pattern gleich einprogrammiert. Also haben wir ein Keiserklasse.

Keiser sollte mehrmal sein und Angriff- oder Rückrufbefehl befehlen.

Hier ist Implementierung der Klasse Keiser:

public class Keiser {
	
	private String name;
	
	private Keiser() {
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String angriffsBefehl() {
		return name+" befielt: Wir greifen an!";
	}
	
	public String rueckzugBefehl() {
		return name+" befiehlt: Wir ziehen zurück!";
	}
}

Hier ist Implementierung der Klasse MainApp:

public class MainApp {

	public static void main(String[] args) {
		Keiser keiser1 = new Keiser();
		keiser1.setName("Otto");
		System.out.println(keiser1.angriffsBefehl());
		
		Keiser keiser2 = new Keiser();
		keiser2.setName("Heinrich");
		System.out.println(keiser2.rueckzugBefehl());
	}
}

Der Konstruktor der Klasse wird private deklariert. Somit ist kein Zugriff von aussen möglich und eine

public class Keiser{
     private String name;
     private Keiser unsere Koenig;
     
     private Keiser(){}

     public Keiser getInstance(){
          if(unsereKoenig == null){
              unsereKoenig = new Keiser();
          }
          return unsereKoenig;
     }

    public void setName(String name){
        this.name = name;
    }

    public String angriffsBefehl(){
        return name + " befiehlt: Wir greifen an";
    }

    public String rueckzugBefehl(){
        return name + " befiehlt: Wir ziehen zurück";
    }

Objektbildung unterbunden. Ein Objekt der Klasse wird jedoch als statisches, finales nach aussen unsichtbares Feld erstellt. Der Zugriff hierauf wird durch eine getter-Methode (hier getInstance) gewährleistet.

public class MainApp{
    public static void main(String args[]){
        Keiser keiser1 = Keiser.getInstance();
        keiser1.setName("Otto");
        System.out.println(keiser1.angriffsBefehl());

        Keiser keiser2 = Keiser.getInstance();
        keiser2.setName("Heinrich IV");
        System.out.println(keiser2.rueckzugBefehl());
}
       

Ein Aufruf erfolgt über die statische Methode: z.B.: Singleton s = new Singleton.getInstance();
und liefert immer das gleiche Objekt. Sie können auf die Singleton-Instanz zugreifen und ihre Methode aufrufen, indem Sie „Singleton.getInstance()“ verwenden.