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