Narzędzia użytkownika

Narzędzia witryny


obserwator

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Previous revision
Next revision
Previous revision
obserwator [2008/04/14 13:53]
wojtek-j
obserwator [2008/04/14 14:05]
wojtek-j
Linia 1: Linia 1:
 ======Wzorzec Projektowy Obserwator====== ======Wzorzec Projektowy Obserwator======
-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.+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. W ogólnym przypadku działanie jego polega na rejestrowaniu przez obiekt obserwowany obiektów go obserwujących (Obserwatorów),​ a następnie po zmianie swojego stanu powiadomieniu wszystkich Obserwatorów o tym fakcie tak, aby każdy z nich mógł odpowiednio zaktualizować swój stan. Wzorzec jest szczególnie przydatny w przypadkach gdy rodzaj i ilość obserwatorów nie jest znana lub zmienna.
 =====Diagram UML===== =====Diagram UML=====
-{{ observer:uml_1.jpg |}}+{{ observer:uml1.jpg |}}
 =====Opis elementów wzorca===== =====Opis elementów wzorca=====
 W skład wzorca wchodzą cztery elementy: W skład wzorca wchodzą cztery elementy:
Linia 9: Linia 9:
     * //usun//- usuwa obserwatora     * //usun//- usuwa obserwatora
     * //​powiadom//​- powiadamia o zmianie wszystkich obserwatorow z listy poprzez wołanie metody odswież dla każdego z nich     * //​powiadom//​- powiadamia o zmianie wszystkich obserwatorow z listy poprzez wołanie metody odswież dla każdego z nich
-  - **Obserwowany Konkretny**:​ Klasa zwraca swój wewnętrzny stan, który jest obiektem zainteresowania obserwatorów. Powiadamia także swoich obserwatorów na wypadek zmiany swojego stanu. Zawiera:+  - **[[obserwator#​Obserwowany Konkretny|Obserwowany Konkretny]]**: Klasa zwraca swój wewnętrzny stan, który jest obiektem zainteresowania obserwatorów. Powiadamia także swoich obserwatorów na wypadek zmiany swojego stanu. Zawiera:
     * //​podaj_stan//​ - zwraca aktualny stan obiektu     * //​podaj_stan//​ - zwraca aktualny stan obiektu
-  - **Abstrakcyjny Obserwator**:​ Klasa abstrakcyjna dostarczająca interfejs dla powiadamiania dla wszystkich obserwatorów. Zawiera:+  - **[[obserwator#​Abstrakcyjny Obserwator|Abstrakcyjny Obserwator]]**: Klasa abstrakcyjna dostarczająca interfejs dla powiadamiania dla wszystkich obserwatorów. Zawiera:
     * //odswiez// - abstrakcyjna metoda która ma być nadpisana przez konkretnego obserwatora     * //odswiez// - abstrakcyjna metoda która ma być nadpisana przez konkretnego obserwatora
-  - **Obserwator konkretny**:​ Klasa pozostaję w związku z obiektem obserwowanym (ObserwowanyKonkretny) aby otrzymać/​pobrać jego stan w wypadku powiadomienia o zmienie. Zawiera:+  - **[[obserwator#​Obserwator konkretny|Obserwator konkretny]]**: Klasa pozostaję w związku z obiektem obserwowanym (ObserwowanyKonkretny) aby otrzymać/​pobrać jego stan w wypadku powiadomienia o zmienie. Zawiera:
     * //odswiez// - podczas wołania tej metody (która nadpisuje metode abstrakcyjną w klasie bazowej), konkretny obserwator woła podaj_stan dla obiektu obserwowanego aby zaktualizować informację o nim     * //odswiez// - podczas wołania tej metody (która nadpisuje metode abstrakcyjną w klasie bazowej), konkretny obserwator woła podaj_stan dla obiektu obserwowanego aby zaktualizować informację o nim
 =====Kod w C++===== =====Kod w C++=====
Linia 24: Linia 24:
  */  */
  void dodaj(Obserwator* o) {  void dodaj(Obserwator* o) {
- + //dodaj obserwatora o do listy obserwatorow
  }  }
  /**  /**
Linia 30: Linia 30:
  */  */
  void powiadom(){  void powiadom(){
- /dla każdego o w obserwatorzy wywołaj o->​odswiez() ​*/+ //dla każdego o w obserwatorzy wywołaj o->​odswiez()
  }  }
  /**  /**
Linia 53: Linia 53:
  */  */
  StanObserwowanego podaj_stan() {  StanObserwowanego podaj_stan() {
- return *stan_;+ //​zwroc ​stan_
  }  }
  private:  private:
obserwator.txt · ostatnio zmienione: 2008/04/14 14:05 przez wojtek-j