Java 使用具有两个不同双变量的可观察/观察者?

Java 使用具有两个不同双变量的可观察/观察者?,java,observable,Java,Observable,我有一个班监控股票市场。它有两个值(双倍)每日最高值和每日最低值。我想从另一个类监视这些变量,并在其中一个发生更改时采取措施。(即更改限额订单) 因此,我有一个类LiveOrderBook extensed Observable和两个更新价格的方法: public void setDailyLow(double price){ low = price; setChanged(); notifyObservers(low); } public void setDailyH

我有一个班监控股票市场。它有两个值(双倍)每日最高值和每日最低值。我想从另一个类监视这些变量,并在其中一个发生更改时采取措施。(即更改限额订单)

因此,我有一个
类LiveOrderBook extensed Observable
和两个更新价格的方法:

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

public void setDailyHigh(double price){
    high = price;
    setChanged();
    notifyObservers(high);
}
我需要观察这些价格变量,所以我制作了一个
类PriceObserver实现了Observer
。我的计划是在我的
Bid
类中创建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==来自另一个类的变量名,那么这是如何完成的?

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

i、 e

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

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 {
            ...
        }
    }
}

低和高是不同的事件,因此您应该创建不同的观察者。另外:在处理货币时,使用
float
double
会导致问题,因为近似值的长度是固定的,例如:十进制值
0.1
不能精确地用二进制表示,因为它是一个无穷的分数。@TimothyTruckle好的,你是说我需要两个类,LowPriceObserver和HighPriceObserver都实现了Observer。这将是一个愚蠢的问题,但如何区分setChanged();观察员(高);对于低价观察者和高价观察者?显然,你还需要处理两个观察者列表,每个事件一个。好的,这是有意义的。但是如果我在NotifyObservators中动态构建新的LowPriceChangedEvent和HighPriceChangedEvent,我如何在我的“出价”中引用它们我想我的困惑是因为我认为LowPriceChangedEvent和HighPriceChangedEvent正在取代PriceObserver类。
public class PriceObserver implements Observer {
    @Override
    public void update(Observable o, Object arg) {
        if (arg instanceOf LowPriceChangedEvent) {
            ...
        } else  if (arg instanceOf HighPriceChangedEvent) {
            ...
        } else {
            ...
        }
    }
}