The Java Program: Reactive.java

  1 import java.util.LinkedList;
  2 
  3 interface Action {
  4    void doit ();
  5 }
  6 
  7 class Process implements Runnable {
  8    private LinkedList<Action> listeners = new LinkedList<Action> ();
  9    private void alert () {
 10       for (Action a: listeners) a.doit();
 11    }
 12    public void addListener (Action a) {
 13       listeners.add (a);
 14    }
 15    public void run () {
 16       for (int i=0;i<5;i++) {
 17                          // pretend something is happening
 18          alert ();       // notify all listeners something happened
 19       }
 20    }
 21 }
 22 
 23 class Reactive {
 24    public static void main (String [] args) {
 25       final Process p = new Process ();
 26       new Thread (p).start();
 27       class A implements Action {
 28          public void doit () { System.out.println ("Alerted!");};
 29       }
 30       p.addListener (new A ());
 31       class B implements Action {
 32          public void doit () { System.out.println ("Me too!");};
 33       }
 34       p.addListener (new B ());
 35    }
 36 }
 37