Java 使用同名notify方法的嵌套侦听器
我有三个类,A、B和C。A侦听B的更改,B侦听C。如果C发生更改,它将对其侦听器B调用notifyChange(),其侦听方法如下所示:Java 使用同名notify方法的嵌套侦听器,java,listener,Java,Listener,我有三个类,A、B和C。A侦听B的更改,B侦听C。如果C发生更改,它将对其侦听器B调用notifyChange(),其侦听方法如下所示: clientComp.setChangeListener(new NavigationClientCompositeListener() { @Override public void notifyChange() { notifyChange(); } }); B只是想把这个
clientComp.setChangeListener(new NavigationClientCompositeListener() {
@Override
public void notifyChange() {
notifyChange();
}
});
B只是想把这个通知传给A,这就是我的问题。notifyChange()方法内的notifyChange()调用将导致无限循环。有没有办法在这个接口实现中引用B类的notifyChange()方法?或者这仅仅是一个糟糕的设计开始
我怎样才能最好地解决这个问题?当然,我可以更改B方法的名称,但如果我有许多这样的嵌套类,而这不是我所追求的解决方案,那么这将是荒谬的。使用。这有助于您引用外部类的当前实例
clientComp.setChangeListener(new NavigationClientCompositeListener() {
@Override
public void notifyChange() {
B.this.notifyChange(); //Calls the notifyChange() of B, which is the outer class
}
});
当建立这种观察者类型的行为时,观察者应该向他们观察的人注册,这可以用接口表示
public interface Observable{
public void registerObserver(Observer o);
}
public interface Observer{
public void notify();
}
然后在各自的类中实现这些接口
class A implements Observer{
public void notify(){
//do something
}
}
class B implements Observer, Observable{
List<Observer> observers = new ArrayList<Observer>();
public void notify(){
for(Observer o: observers){
o.notify();
}
}
public void registerObserver(Observer o){
observers.add(o);
}
}
class C implements Observable{
List<Observer> observers = new ArrayList<Observer>();
public void registerObserver(Observer o){
observers.add(o);
}
public void doSomething(){
for(Observer o: observers){
o.notify();
}
}
}
请注意,这是所有psuedo代码,用于说明原理。我不能保证它的汇编
A a = new A();
B b = new B();
C c = new C();
b.registerObserver(a);
c.registerObserver(b);
c.doSomething();