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).
Diagram odpowiadający załączonemu przykładowi:
Diagram odpowiadający załączonemu przykładowi:
- 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
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Kamil Dworak | C# | Visual Studio 2008 | .cs | .cs | ***** / 4 |
Krzysiek Łopucki | C/C++ | .cpp | .cpp | ***** / 11 | |
Kamil Dworak | Java | .java | .java | ***** / 12 |
Poprawiony: 24 września 2012 12:17
Komentarze
-17
#
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