//Titel:            Testbeispiel fuer das Design Pattern Singleton
//Version:          05.05.2013
//Copyright:        HS-Harz, FB AI
//Autor:            Dipl.-Inf.(TU) Dipl.-Ing.(FH) Michael Wilhelm
//Firma:            HS-Harz
//Beschreibung:     Zweiter Versuch  mit getInstance, mit synchronized


// Design Pattern Singleton
// Stellt sicher, dass nur eine Instanz existiert
// dazu wird der Defautl-Konstrutor als private bzw. protected definiert
// die synchronized-Anweisung stellt die Einzigartigkeit sicher

// Beispiel mit Test-Ausgabe
// a und b sind gleiche Instanzen

import java.io.*;



public class Singleton3 {

  private static void pause() {
    try {
      System.in.read();
    }
    catch (IOException e) {
    }
  }  // pause



 static public void main(String[] args) {
   System.out.println(" ");
   System.out.println(" ");

   Singleton a = Singleton.getInstance();

   System.out.println("a: "+ a.getValue()  );
   System.out.println(" ");
   System.out.println(" ");

   Singleton b = Singleton.getInstance();
   b.setValue(1111);
   System.out.println("a: "+ a.getValue()  );
   System.out.println("b: "+ b.getValue()  );
   System.out.println(" ");
   pause();
 }

 
}



class Singleton {
    private static Singleton instance = null;
    private int i;

    protected Singleton(int i) {
      this.i = i;
    }


   public static Singleton getInstance(){
     synchronized(Singleton.class) {
      if (instance == null) {
        instance = new Singleton(42);
      }
    }
    return instance;
   }  // getInstance



    public int getValue() {
      return i;
    }
    public void setValue(int value) {
      i = value;
    }

}
