| 
 die Klasse taucht im Muster nicht explizit auf, da sie nur für Parameter verwendet wird public 
class AnEvent 
  extends java.util.EventObject 
{ 
  public 
  AnEvent(Object source) { 
    super(source); 
  } 
} 
 | 
    
| 
 hier als Java interface realisiert public 
interface AListener 
  extends java.util.EventListener 
{ 
  public 
  void performAction(AnEvent e); 
} 
 | 
    
| 
 verwaltet eine ganze Liste von Ereignisbehandlern, in die dynamisch Behandler ein- und ausgetragen werden können. import java.util.Vector; 
public 
class ACaller { 
  public 
  ACaller() { 
    theListeners = new Vector<AListener>(); 
  } 
  //-------------------- 
  public 
  void doSomething() { 
    // ... 
    notifyTheListeners(); 
  } 
  //-------------------- 
  // event listener verwalten 
  private 
  Vector<AListener> theListeners; 
  protected 
  void notifyTheListeners() { 
    Vector<AListener> l; 
    AnEvent e = new AnEvent(this); 
    synchronized (this) { 
      l = (Vector<AListener>)theListeners.clone(); 
    } 
    for ( int i = 0; 
          i < l.size(); 
          ++i ) { 
      l.elementAt(i).performAction(e); 
    } 
  } 
  //-------------------- 
  public 
  synchronized 
  void addAListener(AListener l) { 
    theListeners.addElement(l); 
  } 
  public 
  synchronized 
  void removeAListener(AListener l) { 
    theListeners.removeElement(l); 
  } 
} 
 | 
    
| 
 
implementiert die Schnittstelle public 
class ASpecialListener 
  implements AListener { 
    private 
    AReceiver receiver; 
    public 
    ASpecialListener(AReceiver r) { 
      receiver = r; 
    } 
    //-------------------- 
    public 
    void performAction(AnEvent e) { 
      receiver.doIt(); 
    } 
} 
 | 
    
| 
 public 
class AReceiver { 
  public 
  void doIt() { 
    // ... process event 
  } 
} 
 | 
    
| 
 erzeugt die Objekte und verkettet diese über Referenzen public 
class AnApplication { 
  ACaller c; 
  AReceiver r; 
  public 
  AnApplication() { 
    c = new ACaller(); 
    r = new AReceiver(); 
    { 
      AListener l = new ASpecialListener(r); 
      c.addAListener(l); 
    } 
  } 
} 
 | 
    
| Letzte Änderung: 02.11.2016 | © Prof. Dr. Uwe Schmidt |