/** Dieser Observer fuehrt eine kleine Statistik
    auf den Namen aus */
public class StatisticObserver implements java.util.Observer {

  /** In diesem Feld werden die Namensobjekte gehalten */
  private Name[] namen;

  /** In diesem Feld wird gezaehlt, wir oft ein Objekt
      geaendert wurde. */
  private int[] zaehler;

  /** Konstruktor. Verwendet unsere Observer-Klasse, um aus
      ihr die Namensobjekte zu erhalten. */
  public StatisticObserver(Observer obs) {
    // Initialisiere das Namens-Feld
    namen = new Name[10];
    for (int i = 0; i < 10; i++) {
      namen[i] = obs.getName(i);
      namen[i].addObserver(this);
    }
    // Initialisiere das Zaehler-Feld
    zaehler = new int[10];
    java.util.Arrays.fill(zaehler,0);
  }

  /** Wenn ein Name geaendert wird, wird diese Methode aufgerufen */
  public void update(java.util.Observable n,Object o) {
    // Finde den Index, der zu dem Namen passt
    int index = 0;
    while (n != namen[index])
      index++;
    // Erhoehe den Zaehler an der entsprechenden Stelle
    zaehler[index]++;
  }

  /** Erzeuge eine Statistik-Meldung aus den Zaehler-Daten */
  public String getStatistic() {
    String res = "";
    for (int i = 0; i < 10; i++)
      res += "Name Nr. " + i + " wurde " + zaehler[i] +
             "-mal geaendert.\n";
    return res;
  }

}