« Patrons de conception/Observateur » : différence entre les versions
Contenu supprimé Contenu ajouté
imported>Ginosbot m robot Modifie: ru:Наблюдатель (шаблон проектирования) |
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}}
|