本页展示了如何向现有类添加方法,然后展示如何在切面内声明调用这些附加方法的方法。
这是该页面的代码:
aspect PointObserving {
private Vector Point.observers = new Vector();
public static void addObserver(Point p, Screen s) {
p.observers.add(s);
}
public static void removeObserver(Point p, Screen s) {
p.observers.remove(s);
}
pointcut changes(Point p): target(p) && call(void Point.set*(int));
after(Point p): changes(p) {
Iterator iter = p.observers.iterator();
while ( iter.hasNext() ) {
updateObserver(p, (Screen)iter.next());
}
}
static void updateObserver(Point p, Screen s) {
s.display(p);
}
}
我试图在相同的设置(观察者模式)中重用这种模式,但我希望能够从我的 Java 代码中的任何地方添加观察者。因此,在该页面上显示的示例中,我想从我的包中的另一个类执行类似的操作:
Point p = new Point(120, 230);
Screen s = getScreen();
PointObserving.addObserver(p, s);
但是,我的 Java 类看不到“方面”PointObserving(尽管我已将其声明为公共)。