sta*_*ext 7 java observer-pattern
如果我有一个对象,我希望能够观察其他几个可观察对象,而不是所有相同的类型.例如,我希望A能够观察B和C.B和C完全不相关,除了它们都实现了Observable.
显而易见的解决方案是在更新方法中使用"if instanceof",但很快就会变得混乱,因此我想知道是否还有其他方法?
Cam*_*ner 14
一个干净的解决方案是使用(匿名)内部类A
来充当Observer
s.例如:
class A {
public A(B b, C c) {
b.addObserver(new BObserver());
c.addObserver(new CObserver());
}
private class BObserver implements Observer {
// Logic for updates on B in update method
}
private class CObserver implements Observer {
// Logic for updates on C in update method
}
}
Run Code Online (Sandbox Code Playgroud)
这将允许您将BObserver
/ CObserver
实例添加到您实际想要观看的许多B
s和C
s.它具有额外的好处,即A
公共接口不那么混乱,您可以轻松地添加新的内部类来处理类D
,E
以及F
.
与之前的建议类似,您可以将更改更改为.
public void update(Observable o, Object arg) {
try{
Method update = getClass().getMethod(o.getClass(), Object.class);
update.invoke(this, o, arg);
} catch(Exception e) {
// log exception
}
}
Run Code Online (Sandbox Code Playgroud)
这样您就可以添加一个方法
public void update(A a, Object arg);
public void update(B b, Object arg);
public void update(C c, Object arg);
Run Code Online (Sandbox Code Playgroud)
对于您要观察的每种类型.不幸的是,您需要知道Observable的具体类型.但是,您可以更改反射以允许接口等.