Je regardais la source pour SensorManager dans Android et j'ai découvert que lorsque vous enregistrez un SensorEventListener
le SensorManager
passe le contrôle du écouteur d'un ListenerDelegate
.
Je soulève seulement cela à titre d'exemple. J'ai lu l'article Wikipedia sur la programmation des délégués mais je ne suis toujours pas sûr de son objectif. Pourquoi utiliserait-on un "délégué"? Comment cela aide-t-il à contrôler le flux d'un programme? Quels sont les inconvénients d'en utiliser (ou pas) un? Est-il plus pratique pour une utilisation avec des auditeurs?
Edit: ListenerDelegate
est sur la ligne 487 et les méthodes en question sont autour de la ligne 1054.
La délégation n'est pas exactement un "modèle de conception" au sens utilisé dans le livre du GoF. Il est utile dans un certain nombre de scénarios et sert de base à d'autres modèles
Collections.synchronizedList(..)
crée une nouvelle collection qui délègue à celle d'origine, mais ses méthodes sont synchronisées.EnumerationIterator
, qui adapte les énumérations à l'interface Iterator
. La classe a une méthode hasNext()
qui délègue à enumeration.hasMoreElements()
Car
peut avoir start()
, openWindow()
et brake()
, mais chacune de ces méthodes déléguera en fait au moteur, el. fenêtres et système de freinage ( voir aussi ceci )Selon efficace Java (par Joshua Bloch), la composition est favorable par rapport à l'héritage. La composition a plusieurs avantages par rapport à l'héritage. L'une des intuitions pour cela est la suivante: Considérons une sous-classe qui hérite de une classe de base. Ainsi, tout changement dans la classe de base rendra la sous-classe fragile car la sous-classe dépend de la classe de base. En utilisant l'héritage, nous établissons une liaison sur la sous-classe pour qu'elle dépende de la classe de base, ce qui rend notre code fragile. Cependant, en utilisant la composition, nous pouvons supprimer cette limitation. La composition se fait en établissant une "relation has-a" entre les classes au lieu de la relation "is-a" comme dans l'héritage. "Modèle de délégué" et "Décorateur "les deux sont des exemples de la façon dont la composition peut être réalisée. Vous voudrez peut-être lire le chapitre" composition vs héritage "dans le livre efficace Java car il est assez informatif.
Pour une explication plus courte, vous pouvez vous référer à cet article: http://javarevisited.blogspot.com/2013/06/why-favor-composition-over-inheritance-Java-oops-design.html
Le modèle délégué est utilisé pour demander à quelqu'un d'autre de faire le travail, donc, par exemple, dans votre exemple, le SensorManager
ne va pas savoir comment faire ce que chaque auditeur veut, mais vous ne voulez qu'un seul programme écoutant au capteur.
Il y a donc des écouteurs créés en appelant registerListener
sur le SensorManager
, et ces écouteurs reçoivent les informations et peuvent ensuite décider quoi faire avec les données des capteurs.