如何在Obsever模式中处理多个可观察属性?

时间:2019-06-21 15:56:56

标签: java observer-pattern

我有一个实现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

有什么建议吗?也许我不太了解观察者模式。

0 个答案:

没有答案