aboutsummaryrefslogtreecommitdiffstats
path: root/docs/modules/ROOT/examples/observer/SubjectObserverProtocol.java
diff options
context:
space:
mode:
Diffstat (limited to 'docs/modules/ROOT/examples/observer/SubjectObserverProtocol.java')
-rw-r--r--docs/modules/ROOT/examples/observer/SubjectObserverProtocol.java41
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; }
+}