我有一个实现Observable的A类。还有一个实现观察者的B类。 B(我的观察者)需要观察A的多个属性,并根据更改的属性采取不同的行动。我该如何处理?
我想添加一个代表已编辑属性的枚举(将其称为ObservableObjectType),然后编辑Observable / Observer接口,以将其传递给notifyObserver中的Observer。
public interface Observer {
public void update(ObservableObjectType type, Object obj);
}
public interface Observable {
public void AddObserver(Observer observer);
public void RemoveObserver(Observer observer);
public void Notify(ObservableObjectType type, Object obj);
}
public enum ObservableObjectType {FOO,BAR,FOOBAR}
因此在我的A类中,当发生某些更改时,我可以传递ObservableObjectType
public class A implements Observable{
private X foo;
private X bar;
private Z foobar;
...
public setFoo(x){
this.foo=x;
this.Notify(ObservableObjectType.FOO, x);
}
public setBar(x){
this.bar=x;
this.Notify(ObservableObjectType.BAR, x);
}
public setFoobar(x){
this.foobar=x;
this.Notify(ObservableObjectType.FOOBAR, x)
}
我的观察者类B的更新方法如下:
public void update(ObservableObjectType type, Object obj) {
switch(type) {
case FOO:
//something
break;
case BAR:
//something else
break;
case FOOBAR:
//again something else
break;
}
我认为这是处理此问题的一种可怕方法,因为上面代码的丑陋可扩展性,如果将来我需要添加另一个参数来观察,则必须先在枚举,并且看起来不太优雅。
我是否只能传递对象类型,并使用instance of
检入update方法,但是对于相同类型的对象,我是否必须做2种不同的行为?像上面的示例一样,变量 foo 和 bar 。
有什么建议吗?也许我不太了解观察者模式。