2009-06-09 6 views
1

Le motif d'observateur ressemble beaucoup à un motif de notification, car il est basé sur le sujet notifiant les objets qui sont intéressés. La partie "notifier" semble la plus importante, car sans elle, rien n'est notifié.Comment le motif Observateur ressemble-t-il plus à un "Modèle de Notificateur"?

(était-il jamais quelques réflexions à Renommez ce modèle au notificateur Motif?)

Y at-il des modèles d'observation « observateur de la vision » là-bas qui sont plus? Par exemple, celui qui a une minuterie de sorte que les observateurs vont regarder dans l'objet observé toutes les n millisecondes.

Lorsqu'une routine veut observer un emplacement de mémoire, elle appelle une certaine routine et dit: «si l'emplacement mémoire TEMPERATURE_VALUE (0x32FF2C12, par exemple) est modifié, alors appelez-moi (il sait que la valeur est modifiée par le mécanisme d'interruption de matériel.) Dans ce cas, le sujet ne notifie pas ou ne peut pas décider de notifier ou non, mais il est obligé d'être observé

Répondre

5

les objets attachés à l'objet "observent" son comportement, que le mécanisme de cette observance (une impulsion d'information du sujet à l'observateur) est initié par l'objet sujet ne change pas la fonction inhérente des objets observateurs (à savoir, celui de l'observation).

Le motif pourrait être mieux décrit comme un "modèle d'abonné", en ce que l'observateur objecte "s'abonner" aux événements sur l'objet sujet, et par la suite "écoute" ces événements. Il serait exact de dire que l'objet observateur n'observe pas l'objet sujet directement, mais plutôt indirectement à travers les informations qui lui sont fournies à travers le déclenchement de l'objet sujet des événements souscrits.

Ce ne serait pas la première fois qu'un motif était mal nommé. Inversion of Control semble vraiment compliqué jusqu'à ce que vous réalisiez que tout ce que cela signifie est de fournir les objets nécessaires (dépendances) à une classe en les affectant à des paramètres dans un constructeur. Le terme «injection de dépendance» a été inventé dans le but de rendre ce concept plus clair.

+2

Tout est vrai. Observer est fréquemment appelé Publish/Subscribe (Pub/Sub) (bien que pas strictement précis), et dans les abonnés Java sont ActionListeners et EventListeners. Donc tous ces noms sont "observés" dans la nature ...:) (Ne pouvait pas résister) –

+0

Alors que IoC n'est pas le plus intuitif des noms, il décrit ce que le modèle fait assez bien :) –

+0

Par ailleurs, je pense que certains livres disent que le modèle Observateur est le même que le Pub/Sub Pattern, alors que certains livres disent que le motif d'observateur est un à plusieurs, alors que Pub/Sub Pattern est plusieurs-à-un-à-plusieurs –

0

Après avoir compris le modèle plus, je pense que c'est la raison pour laquelle il est appelé « Le modèle d'observateur »:

1) toute méthode peut « notifier ». L'objet de données (le sujet) peut notifier 3 objets codés en dur, qui agissent en tant qu'observateurs. Ou l'objet de données peut passer par un tableau dynamique d'observateurs "enregistrés" et notifier chacun d'eux. La clé ne concerne pas la notification. La clé concerne l'enregistrement.

2) Nous ne voulons pas coder en dur les 3 objets observés, car il s'agit d'un couplage étroit et donc d'une diminution de la réutilisation des objets. Si nous autorisons "l'enregistrement d'observateur", alors 2 objets peuvent s'enregistrer puis observer le sujet, ou 3 objets peuvent s'enregistrer et observer le sujet, ou n'importe quel nombre d'objets peut s'enregistrer et observer le sujet.

3) Donc, c'est "l'enregistrement des observateurs" qui est l'idée clé de ce modèle. Donc, il peut être appelé "The Observer Registration Pattern", ou pour faire court, juste "The Observer Pattern".

Questions connexes