| /* |
| 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; } |
| } |