Das Beobachter Muster
Implementierung und Test des Beobachter Musters, erstellt am 9.11.2003
import java.io.*; import java.util.*; abstract class Subject { private Vector observers = null; public Subject() { observers = new Vector(); } public void attach(Observer o) { observers.addElement(o); } public void detach(Observer o) { observers.removeElement(o); } public void notifyObserver() { for (Enumeration i=observers.elements(); i.hasMoreElements(); ) { Observer o = (Observer)i.nextElement(); o.update(); } } } abstract class Observer { abstract public void update(); } class ConcreteSubject extends Subject { private int state = 0; public int getState() { return state; } public void setState(int state) { this.state = state; System.out.println("State changed to " + state); notifyObserver(); } } class ConcreteObserver extends Observer { private String name = null; private ConcreteSubject subject = null; public ConcreteObserver(String name,ConcreteSubject subject) { this.name = name; this.subject = subject; } public void update() { int state = subject.getState(); System.out.println("Update : " + name + " : " + state); } } public class Main { public static void main(String args[]) { ConcreteSubject s = new ConcreteSubject(); ConcreteObserver o1 = new ConcreteObserver("O1",s); ConcreteObserver o2 = new ConcreteObserver("O2",s); ConcreteObserver o3 = new ConcreteObserver("O3",s); s.attach(o1); s.attach(o2); s.setState(0); System.out.println(); s.attach(o3); s.setState(1); System.out.println(); s.detach(o1); s.setState(2); System.out.println(); } }