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 Both sides next revision
obserwator [2008/04/14 13:28]
wojtek-j
obserwator [2008/04/14 13:42]
wojtek-j
Linia 4: Linia 4:
 {{ observer:​uml_1.jpg |}} {{ observer:​uml_1.jpg |}}
 =====Kod w C++===== =====Kod w C++=====
 +  * **Abstrakcyjny Obserwowany**
 <code cpp> <code cpp>
-//​Abstrakcyjny Obserwowany 
 class Obserwowany { class Obserwowany {
  public:  public:
 +/* dodaj obserwatora o do listy obserwatorow */
  void dodaj(Obserwator* o) {  void dodaj(Obserwator* o) {
- /* dodaj obserwatora o do listy obserwatorow */ 
  }  }
  void powiadom(){  void powiadom(){
Linia 19: Linia 19:
 }; };
 Subject::​~Subject(){} Subject::​~Subject(){}
 +</​code>​
 +<code cpp>
 //​Obserwowany konkretny //​Obserwowany konkretny
 class ObserwowanyKonkretny : public Obserwowany { class ObserwowanyKonkretny : public Obserwowany {
Linia 73: Linia 75:
 =====Podsumowanie===== =====Podsumowanie=====
 Wzorzec obserwatora pozwala uniknąć niepotrzebnych (nieraz uciążliwych albo niemożliwych) bezpośrednich interakcji pomiędzy obiektami. Przykładem takiej sytuacji jest problem w którym nie znamy ilości obiektów które pozostaną w zależności lub też ilość ta może ulegać zmianie. Przy wykorzystaniu tego wzorca dodawanie i usuwanie obserwatorów nie stanowi problemu. Wzorzec obserwatora pozwala uniknąć niepotrzebnych (nieraz uciążliwych albo niemożliwych) bezpośrednich interakcji pomiędzy obiektami. Przykładem takiej sytuacji jest problem w którym nie znamy ilości obiektów które pozostaną w zależności lub też ilość ta może ulegać zmianie. Przy wykorzystaniu tego wzorca dodawanie i usuwanie obserwatorów nie stanowi problemu.
 +
 W większości przypadków,​ obserwatorzy zostaną tylko powiadomieni o zmianach. Znaczy to, że sami będą musieli je rozpoznać i ocenić czy ich dotyczą, co jednak może zostać rozwiązane poprzez umieszczanie odpowiedniej informacji w powiadomieniu. W większości przypadków,​ obserwatorzy zostaną tylko powiadomieni o zmianach. Znaczy to, że sami będą musieli je rozpoznać i ocenić czy ich dotyczą, co jednak może zostać rozwiązane poprzez umieszczanie odpowiedniej informacji w powiadomieniu.
 +
 Obiekty obserwatorów są od siebie zupełnie niezależne,​ natomiast wszystkie polegają na stanie obiektu obserwowanego,​ toteż należy zwrócić uwagę na zmiany stanu obiektu obserwowanego jakie mogą zostać wywołane przez obserwatora,​ zwłaszcza podczas wykonywania przez niego metody //​odswiez//​. Sytuacja taka pociąga za sobą jeszcze jedno niebezpieczeństwo,​ otóż jeśli zmiana stanu obiektu obserwowanego następuję w metodzie //​odswiez//,​ bardzo łatwo o kolejne powiadomienie a co za tym idzie kolejne wywołania metody //odswiez// - co w takim wypadku prowadzi do rekurencji. Obiekty obserwatorów są od siebie zupełnie niezależne,​ natomiast wszystkie polegają na stanie obiektu obserwowanego,​ toteż należy zwrócić uwagę na zmiany stanu obiektu obserwowanego jakie mogą zostać wywołane przez obserwatora,​ zwłaszcza podczas wykonywania przez niego metody //​odswiez//​. Sytuacja taka pociąga za sobą jeszcze jedno niebezpieczeństwo,​ otóż jeśli zmiana stanu obiektu obserwowanego następuję w metodzie //​odswiez//,​ bardzo łatwo o kolejne powiadomienie a co za tym idzie kolejne wywołania metody //odswiez// - co w takim wypadku prowadzi do rekurencji.
 +
 Jako że nie istnieje jawna interakcja pomiędzy obiektem obserwowany a obserwatorami,​ łatwo doprowadzić do sytuacji w której obiekt obserwowany przestaje być tym czym był do tej pory (w szczególności zostaje usunięty) bez podania odpowiedniej informacji do obserwatorów. Jako że nie istnieje jawna interakcja pomiędzy obiektem obserwowany a obserwatorami,​ łatwo doprowadzić do sytuacji w której obiekt obserwowany przestaje być tym czym był do tej pory (w szczególności zostaje usunięty) bez podania odpowiedniej informacji do obserwatorów.
obserwator.txt · ostatnio zmienione: 2008/04/14 14:05 przez wojtek-j