algorytm.org

Obserwator (observer)

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Obserwator (observer)
Ocena użytkowników:***** / 15
SłabyŚwietny 
Wpisany przez Kamil Dworak, 10 sierpnia 2010 19:53

Obserwator (ang. observer) - wzorzec z rodziny wzorców operacyjnych. Składa się z obiektu, który nazywamy "obiektem obserwowanym" oraz pewnej liczy obiektów obserwujących. Występuje tutaj relacja typu jeden do wielu. Obiekt obserwowany jest zarządcą danych, informuje on wszystkich swoich obserwatorów o zmianach w danych, które zawiera. Jest on jedynym prawowitym właścicielem owych danych. Gdy obserwatorzy dostają informacje, że dane uległy zmianie, pobierają je od obiektu obserwowanego i dokonują aktualizacji w posiadanych przez siebie danych, pod kątem stanu danych obiektu obserwowanego. Obiekt obserwujący sam może zdecydować, czy dalej chce obserwować, ale również obiekt obserwowany może go usunąć z listy obserwatorów. Obserwator nie zna innych obserwujących, są oni niezależni od siebie (jakakolwiek modyfikacja jednego obserwatora nie wpływają na innych). Wzorzec charakteryzuje się łatwością dodawania nowych obserwujących (tworzymy nową klasę, która będzie implementować interfejs obserwator). Obiekt obserwujący sam może być obserwowanym (kompozycja).

obserwator


Diagram odpowiadający załączonemu przykładowi:

obserwator - przykład


  • Tworzymy obiekt TotoLotek, który będzie obserwowany.
  • Następnie deklarujemy dwóch obserwatorów (telewizja i internet) oraz dodajemy ich do listy obserwatorów.
  • Wykonujemy pierwsze losowanie.
  • Na samym końcu metody kolejneLosowanietablicy() znajduje się wywołanie metody powiadamiajObserwatorów(). Wywołuje ona, dla każdego obserwatora będącego w zbiorze, metodę update.
  • Dane w każdym z obserwatorów zostały zaktualizowane.
  • Publikujemy wyniki losowania w telewizji oraz internecie.
  • Losowanie 2 przebiega tak samo jak losowanie 1.
  • Przed losowaniem 3 obserwator telewizja zdecydował, że nie chce już być obserwującym i samoczynnie opuszcza zbiór obserwatorów.
  • Po 3 publikacji widzimy, że internet ma zaktualizowane dane, natomiast wyniki publikowane w telewizji nie są już aktualne.


Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Kamil DworakC#Visual Studio 2008
.cs
.cs
***** / 2
Krzysiek ŁopuckiC/C++
.cpp
.cpp
***** / 7
Kamil DworakJava
.java
.java
***** / 11
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 24 września 2012 12:17
Komentarze
photo
-19 # martaaaaaaaaa 2011-05-10 15:33
Zostało to opisane trochę niedokładnie - np gdzie mam deklarować dwóch obserwatorów i jak przebiega to "publikowanie wyników w internecie i telewizji" po zaktualizowaniu obserwatorów. I co właściwie powinno być w funkcji update?
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz