2012-03-10 84 views
1
// 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

何時以及如何「瞭解」傳感器? – 2012-03-10 12:45:09

回答

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); 

前一種方法有幾個缺點:

  • 介紹從AvgTempSensor

  • 如果你想訂閱多個傳感器,需要提供第一個構造函數參數和不必要的耦合採用後一種方法的剩餘?

  • this引用從構造逃逸,很糟糕,你notifyReceived可能會調用之前的對象被完全初始化(尤其是因爲這是一個abstract類)

  • AvgTemp不能沒有一個Sensor這似乎嚴格並使測試更難(需要嘲諷/剔除)

相關問題