
class ObservedClock extends Clock implements Subject {
  public ObservedClock() { itsSubjectImpl = new SubjectImpl(); }
  public void Tick() { super.Tick(); Notify(); }
  public void Notify() { itsSubjectImpl.Notify(); }
  public void Register(Observer o) { itsSubjectImpl.Register(o); }
  private SubjectImpl itsSubjectImpl;
}

class Display implements Observer {
  public void Update() {
    System.out.print("tick! ");
  }
}

public class Application {
  public static void main(String[] arg) {
    ObservedClock clock = new ObservedClock();
    Display       display = new Display();
    clock.Register(display);
    clock.Tick();
    clock.Tick();
    clock.Tick();
    clock.Tick();
    clock.Tick();
  }
}

