[design pattern] mediateur
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:
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:
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:
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:
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.