diff options
Diffstat (limited to 'docs/modules/ROOT/examples/observer/SubjectObserverProtocol.java')
-rw-r--r-- | docs/modules/ROOT/examples/observer/SubjectObserverProtocol.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/docs/modules/ROOT/examples/observer/SubjectObserverProtocol.java b/docs/modules/ROOT/examples/observer/SubjectObserverProtocol.java new file mode 100644 index 000000000..05e54d76c --- /dev/null +++ b/docs/modules/ROOT/examples/observer/SubjectObserverProtocol.java @@ -0,0 +1,41 @@ +/* +Copyright (c) Xerox Corporation 1998-2002. All rights reserved. + +Use and copying of this software and preparation of derivative works based +upon this software are permitted. Any distribution of this software or +derivative works must comply with all applicable United States export control +laws. + +This software is made available AS IS, and Xerox Corporation makes no warranty +about the software, its performance or its conformity to any specification. +*/ + +package observer; + +import java.util.Vector; + +abstract aspect SubjectObserverProtocol { + + abstract pointcut stateChanges(Subject s); + + after(Subject s): stateChanges(s) { + for (int i = 0; i < s.getObservers().size(); i++) { + ((Observer)s.getObservers().elementAt(i)).update(); + } + } + + private Vector Subject.observers = new Vector(); + public void Subject.addObserver(Observer obs) { + observers.addElement(obs); + obs.setSubject(this); + } + public void Subject.removeObserver(Observer obs) { + observers.removeElement(obs); + obs.setSubject(null); + } + public Vector Subject.getObservers() { return observers; } + + private Subject Observer.subject = null; + public void Observer.setSubject(Subject s) { subject = s; } + public Subject Observer.getSubject() { return subject; } +} |