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.
Et une classe médiateur:
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 collégue:
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 que... comme par magie dans la classe mediateur dans notify le process de l'observer soit le bon.
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) {} };
//Dans une classe collègue concrète
Avez-vous une idée de comment réaliser ceci.
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) }
Merci.
Partager