2017-03-12 42 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对其进行操作。