// AvgTemp.java
public abstract class AvgTemp {
// This function receives nottification from other Temperature Sensors
public AvgTemp() {
}
public void notifyReceived(String eventName, Object arg) {
if (eventName.equals("temperatureMeasurement"))
{
onNewtemperatureMeasurement((TempStruct) arg);
}
}
public abstract void onNewtemperatureMeasurement(TempStruct tempStruct);
}
要接收通知,AvgTemp.java文件必须订阅温度传感器。这意味着我必须调用subscribetemperatureMeasurement()。
现在,我的问题是“我应该在AvgTemp.java文件中调用subscribetemperatureMeasurement(),我可以从Sensor获取通知吗?”
我应该在AvgTemp类的构造函数中还是在其他地方调用subscribetemperatureMeasurement()函数?
答案 0 :(得分:2)
看起来您的问题缺少Sensor
骨架,我想它看起来像这样:
public class Sensor {
public void subscribeTemperatureMeasurement(AvgTemp avgTemp) {
//keep avgTemp reference for later use
}
}
你可以选择:
public AvgTemp(Sensor sensor) {
sensor.subscribeTemperatureMeasurement(this);
}
或(外面某处):
AvtGemp avgTemp = SomeAvgTemp();
sensor.subscribeTemperatureMeasurement(avgTemp);
前一种方法有几个缺点:
引入了从AvgTemp
到Sensor
如果你想订阅几个传感器,你提供第一个作为构造函数参数,剩下的使用后一种方法怎么办?
this
引用构造函数的转义,非常糟糕,在对象完全初始化之前可能会调用notifyReceived
(特别是因为这是abstract
类)
AvgTemp
不能没有看似严格的Sensor
,并且要求测试更加严格(需要模拟/存根)