Bonjour,
je cherche une solution sur le pattern médiateur.

Voici ci-dessous ce que je voudrais réaliser:

J'ai une hiérarchie de classe paramètre qui vont typé mais notification.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
class PrmBase { /*...*/ };
class PrmDeriv1 : public PrmBase { /*...*/ };
class PrmDeriv2 : public PrmBase { /*...*/ };
class PrmDeriv3 : public PrmBase { /*...*/ };
class PrmDeriv4 : public PrmBase { /*...*/ };
Et une classe médiateur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
class Mediator {
/*...*/
public:
   static void Notify(Colleague *subject, const PrmBase& prm)
  {
    /*...*/
    Colleague *observer = GetObserver(subject);
    if(observer) observer->Process(prm);
   /*...*/
  }
};
Et une classe collégue:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
class Colleague {
/*...*/
public:
 virtual void Process(const PrmBase& prm) {}
 virtual void Process(const PrmDeriv1 & prm) {}
 virtual void Process(const PrmDeriv2 & prm) {}
 virtual void Process(const PrmDeriv3 & prm) {}
 virtual void Process(const PrmDeriv4 & prm) {}
};
Et que... comme par magie dans la classe mediateur dans notify le process de l'observer soit le bon.

//Dans une classe collègue concrète

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
class ColleagueConcrete : public Colleague {
/*...*/
   void Update()
  {
     /*...*/
     Mediator::Notify(this, PrmDeriv2);
     //Notify call virtual void Process(const PrmDeriv2 & prm)
  }
Avez-vous une idée de comment réaliser ceci.

Merci.