IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Design Patterns Discussion :

Modèle observateur - plusieurs observés


Sujet :

Design Patterns

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Points : 40
    Points
    40
    Par défaut Modèle observateur - plusieurs observés
    Bonjour,

    J'utilise le modèle de conception "observateur" (dans le cadre MVC).

    Mes observateurs peuvent observer plusieurs objets. Comme ces objets sont un peu complexes, j'ai fait comme suggéré sur ce tutoriel http://come-david.developpez.com/tut...servateur#LVII : la méthode statut() renvoie un objet info correspondant à chaque observé. De même, la méthode notifier a comme paramètre this.

    Comment gérer dans la méthode update de l'observateur ? Il faut tester le type de l'objet reçu en paramètre pour traiter en conséquence ? Cela ne sonne pas super mais je ne vois pas comment procéder autrement...

    Merci d'avance pour votre aide.

    Benoît

  2. #2
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Tu peux faire un truc un peu plus cool en introduisant la notion d'Event. Chaque Event a un type (chaine de caractères ou entier) et un "Observable". Quand tu "Notifie", tu passes un Event spécifique de ton Observable (i.e l'attribut 'type' de ton Event est spécifique de ton 'Observable'). Le Update fait alors un test sur le type de l'Event; un switch est facile si le 'type' est un entier.

    Un pattern que j'aime bien c'est une version moins liée que l'Observateur/Observable et qui passe par l'usage exclusive d'Event et d'un "InfoBUS". Les Observateurs s'abonnent à des "Event type" auprès de l'InfoBUS et quand les Observable font un "notifie", ils ne font en fait que publier un Event auprès de l'InfoBUS. C'est l'InfoBUS qui lui sait qui est abonné à tel ou tel "Event type" et donc fait le relai vers les Observateurs. Ainsi les Observables ne connaissent pas les Observateurs et inversement. Tout se passe au travers des Event.
    C'est en fait une version simplifiée de l'API JMS en Java.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 97
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par ego Voir le message
    Tu peux faire un truc un peu plus cool en introduisant la notion d'Event. Chaque Event a un type (chaine de caractères ou entier) et un "Observable". Quand tu "Notifie", tu passes un Event spécifique de ton Observable (i.e l'attribut 'type' de ton Event est spécifique de ton 'Observable'). Le Update fait alors un test sur le type de l'Event; un switch est facile si le 'type' est un entier.

    Un pattern que j'aime bien c'est une version moins liée que l'Observateur/Observable et qui passe par l'usage exclusive d'Event et d'un "InfoBUS". Les Observateurs s'abonnent à des "Event type" auprès de l'InfoBUS et quand les Observable font un "notifie", ils ne font en fait que publier un Event auprès de l'InfoBUS. C'est l'InfoBUS qui lui sait qui est abonné à tel ou tel "Event type" et donc fait le relai vers les Observateurs. Ainsi les Observables ne connaissent pas les Observateurs et inversement. Tout se passe au travers des Event.
    C'est en fait une version simplifiée de l'API JMS en Java.
    Ce que tu décris ressemble assez au pattern Mediator

  4. #4
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Le Mediator est plutôt fait pour concentrer les appels "sortant" d'un composant, il ne fonctionne pas par évènements.

Discussions similaires

  1. Suppression de plusieurs observations au format caractère
    Par hamdy1999 dans le forum Débutez
    Réponses: 8
    Dernier message: 03/06/2014, 09h24
  2. Synchronisation d'un modèle entre plusieurs bases
    Par Logarithmix dans le forum Administration
    Réponses: 6
    Dernier message: 18/06/2013, 22h13
  3. Ouvrir modèle powerpoint PLUSIEURS SLIDES dans VBA Excel
    Par yanelo09 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/03/2012, 14h33
  4. un observateur pour plusieur observer
    Par LesLemmings dans le forum Débuter
    Réponses: 1
    Dernier message: 19/08/2009, 10h26
  5. Modèle pour plusieurs documents différents
    Par Joachim49 dans le forum Word
    Réponses: 1
    Dernier message: 18/06/2008, 18h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo