implementation design pattern Observer/Observable - C++ - Programmation
MarshPosté le 02-05-2008 à 12:32:29
Bonjour à tous,
J'ai un problème pour implémenter le design pattern observer/observable en C++: le truc c'est qu'un observable doit connaitre les observers qui l'observent (ca permet notamment de notifier une modification d'état à tous les observers) mais je pense qu'il faut également que l'observer connaisse les observables qu'il observe puisque s'il est détruit, il faut qu'il se désenregistre auprès de ses observables (je sais pas si je suis très clair). Voici mon code: Observable.h:
Code :
#include <set>
template<typename Subject> class Observer;
template<typename Subject>
class Observable
{
private:
std::set<Observer<Subject>*> _setObservers;
public:
Observable();
~Observable();
void addObserver(Observer<Subject> *o);
void deleteObserver(Observer<Subject> *o);
void notifyObservers(void* arg=0);
};
Observer.h :
Code :
#include <set>
template<typename Subject> class Observable;
template<typename Subject>
class Observer
{
private:
std::set<Observable<Subject>*> _setObservables; /*!< La liste des objets a observer */
for (it=_setObservers.begin(); it!=_setObservers.end(); ++it)
(*it)->update(this, arg);
}
et Observer.cpp :
Code :
#include "Observable.h"
template<typename Subject>
Observer<Subject>::~Observer ()
{
std::set<Observable<Subject>*>::iterator itObs;
itObs = _setObservables.begin();
while (itObs!=_setObservables.end())
{
(*itObs)->deleteObserver(this);
itObs = _setObservables.begin();
}
}
Le problème de mon approche est d'utiliser les friend mais je vois pas comment faire autrement puisque je ne veux pas mettre d'accesseur à mon _setObservables dans ma classe observer (ça na pas de sens que l'utilisateur de ma classe sache comment je gère les observables dans observer). De même, je ne voudrais pas avoir à ajouter de méthodes addObservable et deleteObservable dans ma classe Observer. Donc je me demande si je suis pas dans les 0.0005% des cas où on peut utiliser les friend?
Marsh Posté le 02-05-2008 à 12:32:29
Bonjour à tous,
J'ai un problème pour implémenter le design pattern observer/observable en C++: le truc c'est qu'un observable doit connaitre les observers qui l'observent (ca permet notamment de notifier une modification d'état à tous les observers) mais je pense qu'il faut également que l'observer connaisse les observables qu'il observe puisque s'il est détruit, il faut qu'il se désenregistre auprès de ses observables (je sais pas si je suis très clair).
Voici mon code:
Observable.h:
Observer.h :
Observable.cpp :
et Observer.cpp :
Le problème de mon approche est d'utiliser les friend mais je vois pas comment faire autrement puisque je ne veux pas mettre d'accesseur à mon _setObservables dans ma classe observer (ça na pas de sens que l'utilisateur de ma classe sache comment je gère les observables dans observer). De même, je ne voudrais pas avoir à ajouter de méthodes addObservable et deleteObservable dans ma classe Observer. Donc je me demande si je suis pas dans les 0.0005% des cas où on peut utiliser les friend?
Message édité par Polo37 le 02-05-2008 à 15:32:18