2017-03-12 1 views
0

J'ai étudié le modèle d'observateur de livre head_first_design_Patterns. Le scénario est ce «il y a un ArrayList nommé observateurs et il a tous les observateurs qui mettent en œuvre l'interface Observer Dans le livre, ils utilisent une boucle pour mettre à jour tous les observateurs La boucle est:..Qu'est-ce que cette ligne de code produit?

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

Je veux savoir comment est la première déclaration de la boucle fonctionne. créons-nous des références à un observateur particulier ici?

+0

Possible duplicate of [Quand devrions-nous utiliser Observer et Observable] (http://stackoverflow.com/questions/13744450/when-should-we-use-observer-and-observable) – Ravi

+0

Oui, vous obtenez une référence à l'objet que 'observers.get (i)' renvoie. Vous jetez cet objet à un '(Observateur)', et vous pouvez ensuite l'utiliser en utilisant la variable locale 'observateur'. – uvesten

+0

@Ravi: Je ne pense pas que la question ait quelque chose à voir avec la question que vous avez liée. – uvesten

Répondre

2

Je veux savoir comment fonctionne la première instruction de boucle. Est-ce que crée des références à un observateur particulier ici?

Cette déclaration simplement l'élément obtient dans le ArrayList à l'endroit spécifié index et veille à ce que son type Observer avant de pointer la référence à l'objet récupéré.

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

Si le casting est un succès, la référence à la object récupéré se sert à mettre à jour les données pour ce object particulier.

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

Merci pour l'explication :) – Anonymous

+0

vous êtes les bienvenus. –

0

la première ligne prenez simplement l'observateur de la liste. Il crée une nouvelle référence à un objet existant

+0

Qu'est-ce que ** (Observateur) ** pour dans la déclaration? – Anonymous

+0

Type de coulée. Peut-être que lors de la déclaration de la liste le type générique n'est pas là –

1

Oui, vous obtenez une référence à l'objet observers.get(i) retours. Vous affectez cet objet à (Observer), puis vous pouvez l'utiliser à l'aide de la variable locale observer.