To jest stara wersja strony!
Wzorzec Obserwatora (ang. The Observer Pattern) jest wzorcem projektowym służącym do obserwowania stanu obiektu. Wzorzec ten jest pomyślany do rozwiązania sytuacji w której stan większej liczby obiektów (obserwatorów) zależy od stanu innego obiektu (obserwowanego) - pomaga zachować spójność między nimi.
//Abstrakcyjny Obserwowany class Obserwowany { public: void dodaj(Obserwator* o) { /* dodaj obserwatora o do listy obserwatorow */ } void powiadom(){ /* dla każdego o w obserwatorzy wywołaj o->odswiez() */ } virtual ~Obserwowany() = 0; private: std::vector<Obserwator*> obserwatorzy; }; Subject::~Subject(){} //Obserwowany konkretny class ObserwowanyKonkretny : public Obserwowany { public: void podaj_stan(StanObserwowanego* stan) { /* podaj stan, np. poprzez odpowiednia struktore StanObserwowanego */ } }; //Abstrakcyjny Obserwator class Obserwator { public: virtual void odswiez() = 0; virtual ~Obserwator(){} }; //Obserwator konkretny class ObserwatorKonkretny : public Obserwator { public: void odswiez() { /* uzyskaj aktualny stan obserwowanego */ } };
W skład wzorca wchodzą cztery elementy:
Dla przykładu weźmy dwa obiekty A oraz B, przy czym stan obiektu A jest zależny od stanu obiektu B, czyli może się zdarzyć że po zmianie stanu obiektu B obiekt A również powinien zmienić swój stan. W tym ogólnym (i prostym) przypadku można pokusić się o bezpośrednią interakcje pomiędzy obiektami poprzez utrzymanie w jednym z nich wskaźnika lub referencji na drugi. Sytuacja jednak komplikuje się kiedy:
Wygodnym sposobem jest utrzymywanie niezależnych obiektów współpracyjących ze sobą bez wiedzy o swoim istnieniu - tak działa Wzorzec Obserwatora.