//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:     Dritter Versuch  mit getInstance, static Erzeugung


// Design Pattern Singleton
// Stellt sicher, dass nur eine Instanz existiert
// dazu wird der Default-Konstrutor als private bzw. protected definiert
// durch die statische Erzeugung ist diese Variante Thread-sicher

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

import java.io.*;



public class Singleton5 {

  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()  );  // 2
    a.setValue(2222);
    System.out.println("a: "+ a.getValue()  );  // 2222
    System.out.println(" ");
    System.out.println(" ");
    
    Singleton  b = Singleton.getInstance();
    System.out.println("b: "+ b.getValue()  ); //  2222
    b.setValue(1111);
    System.out.println("a: "+ a.getValue()  );
    System.out.println("b: "+ b.getValue()  );
    System.out.println(" ");
    test();
    pause();
 }


 static void test() {
     Singleton  c = Singleton.getInstance();
     System.out.println("c: "+ c.getValue()  );
 }

}



class Singleton {
    private static Singleton instance = new Singleton(2);

    private int i=33;

    protected Singleton(int i) {
      System.out.println("i im Konstruktor: "+this.i);
      this.i = i;
    }
    public static Singleton getInstance(){
         return instance;
    }
    public int getValue() {
      return i;
    }
    public void setValue(int value) {
      i = value;
    }

}
