使用具有两个不同双变量的Observable / Observer?

时间:2018-02-02 10:20:07

标签: java observable

我有一个监控股市的课程。它包含2个值(双倍)每日高点和每日低点。我想从另一个类监视这些变量,如果有任何变化,我们会采取行动。 (即更改限价单)

所以,我有一个class LiveOrderBook extends Observable和两个方法来更新价格:

public void setDailyLow(double price){
    low = price;
    setChanged();
    notifyObservers(low);
}

public void setDailyHigh(double price){
    high = price;
    setChanged();
    notifyObservers(high);
}

我需要观察这些价格变量,所以我做了class PriceObserver implements Observer。我的计划是在我的Bid类中创建PriceObserver对象,以更改股票市场出价。

我的PriceObserver类

private double low;
private double high;

public PriceObserver(){

    low = 0;
    high = 0;
}

public void update(Observable arg0, Object arg1) {
    // TODO Auto-generated method stub
}

我现在如何指定应更新哪个double?我无法检查arg0 ==来自另一个类的变量名称,那么这是如何完成的?

2 个答案:

答案 0 :(得分:3)

一种简单(有用)的方法是首先创建可以分派的不同事件类:

public class LowPriceChangedEvent {
    private double price;
    // Constructor and getter up to you.
}

public class HighPriceChangedEvent {
    private double price;
    // Constructor and getter up to you.
}

现在您可以在LiveOrderBook课程中发送这些事件:

public void setDailyLow(double price){
    low = price;
    setChanged();
    notifyObservers(new LowPriceChangedEvent(low));
}

public void setDailyHigh(double price){
    high = price;
    setChanged();
    notifyObservers(new HighPriceChangedEvent(low));
}

您的PriceObserver现在可以通过简单的instanceOf检查轻松区分事件:

public class PriceObserver implements Observer {
    @Override
    public void update(Observable o, Object arg) {
        if (arg instanceOf LowPriceChangedEvent) {
            ...
        } else  if (arg instanceOf HighPriceChangedEvent) {
            ...
        } else {
            ...
        }
    }
}

答案 1 :(得分:0)

您的 arg1 是一个对象。我建议使用double []调用notifyObservers方法(所有数组都可以转换为Object)。

notifyObservers(new double[] {low, high});