我有一个监控股市的课程。它包含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 ==来自另一个类的变量名称,那么这是如何完成的?
答案 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});