« Patrons de conception/Observateur » : différence entre les versions

Contenu supprimé Contenu ajouté
imported>Ginosbot
imported>Helroem
Aucun résumé des modifications
Ligne 39 :
}
</source>
 
== Un exemple en langage C++ ==
 
Dans cet exemple, on veut afficher les événements qui se produisent dans une classe Exemple.
 
<source lang="cpp">
#include <string>
#include <list>
#include <iostream>
using namespace std;
 
class IObserver
{
public:
virtual void update(string data) = 0;
};
 
class Observable
{
private:
list<IObserver*> list_observers;
 
public:
void notify(string data)
{
// Notifier tout les observers
for (list<IObserver*>::iterator it = this->list_observers.begin(); it != this->list_observers.end(); ++it)
(*it)->update(data);
}
 
void addObserver(IObserver* observer)
{
// Ajouter un observer a la liste
this->list_observers.push_back(observer);
}
};
 
class Display : public IObserver
{
void update(string data)
{
cout << "Evenement : " << data << endl;
}
};
 
class Exemple : public Observable
{
public:
void message(string message)
{
// Lancer un evenement lors de la reception d'un message
this->notify(message);
}
};
 
int main()
{
Display display;
Exemple exemple;
 
// On veut que "Display" soit prevenu a chaque reception d'un message dans "Exemple"
exemple.addObserver(&display);
 
// On envoi un message a Exemple
exemple.message("reception d'un message"); // Sera affiché par Display
 
return (0);
}
</source>
 
 
{{Portail informatique}}