2017-03-12 66 views
0

我一直在研究觀察者模式head_first_design_Patterns一書。情景是這樣的「有一個名爲的ArrayList觀察者並且它具有所有觀察者正在實現的觀察者接口接口 在書中,他們使用一個循環來更新所有的觀察者,循環是:這行代碼是怎麼產生的?

for(int i=0; observers.size();i++) 
{ 
    Observer observer= (Observer) observers.get(i); 
    observer.update(temperature,humidity,pressure); 
} 

我想知道的是如何循環的第一個語句工作。我們是創造引用在此特定的觀察者?

+0

可能重複的[什麼時候應該使用Observer和Observable](http://stackoverflow.com/questions/13744450/when-should-we-use-observer-and-observable) – Ravi

+0

是的,你得到一個參考到'observers.get(i)'返回的對象。你將這個對象轉換爲'(Observer)',然後你可以使用局部變量'observer'對它進行操作。 – uvesten

+0

@Ravi:我不認爲這個問題與你關聯的問題有關。 – uvesten

回答

2

我想知道循環的第一條語句是如何工作的。 我們在這裏創建對特定觀察者的引用嗎?

這種說法只是獲取ArrayList中的元素在指定index並確保其指向的參考檢索的對象之前Observer類型。

Observer observer= (Observer) observers.get(i); 

如果轉換成功,則參照檢索object被用於更新數據用於該特定object

observer.update(temperature,humidity,pressure); 
+0

謝謝你的解釋:) – Anonymous

+0

不客氣。 –

0

第一行只是獲取列表中的觀察者,它創建了一個新的參考到現有的物體

+0

聲明中的**(Observer)**是什麼? – Anonymous

+0

類型鑄造。也許在列表聲明期間,通用類型不存在 –

1

是的,您正在獲取observers.get(i)返回的對象的引用。您正在將此對象投射到(Observer),然後您可以使用本地變量observer對其進行操作。