Wzorzec projektowy: obserwator

Wzorzec Obserwator definiuje pomiędzy obiektami relację jeden-do-wielu w taki sposób, że kiedy wybrany obiekt zmienia swój stan, to wszystkie jego obiekty zależne zostają o tym powiadomione i automatycznie zaktualizowane.

Wzorzec projektowy Obserwator bardzo dobrze sprawdza się w aplikacjach wielowątkowych oraz systemach rozproszonych. Przykładem takiej aplikacji może być Czytelnik, który zawsze jest powiadomiony o nowym wpisie w Blogu. Cała idea sprowadza się do ciągłego pytania Bloga, czy pojawił się nowy wpis.

Obiekt obserwowany (np. Blog) oraz obiekty obserwujące (np. Czytelnicy) są ze sobą powiązane relacją jeden-do-wielu. Obiekty obserwujące są zależne od obiektu obserwowanego, co przejawia się w ten sposób, że jeżeli obiekt obserwowany zmienia swój stan, to wszystkie obiekty obserwujące zostają o tym powiadomione. W zależności od sposobu, w jaki realizowane jest powiadamianie, obiekty zależne mogą być również automatycznie aktualizowane (mogą otrzymywać nowe dane od obiektu obserwowanego).

  1. Implementujemy interfejs, który umożliwi nam dokonywanie powiadomień, w którym metoda przyjmuje parametr mail, czyli daną zwracaną użytkownikowi. (linia 1-3 kodu)
  2. Następnie klasa użytkownika musi tę informacje odczytywać, więc należy w niej zaimplementować powyższy interfejs. W celu rozróżnienia użytkowników dodano w modelu imię odbiorcy i przykładowo nadpisano metodę pochodzącą z interfejsu MailObserver. (linia 6-18 kodu)
  3. Kluczowym tutaj elementem jest Subject – klasa, która jest nasłuchiwana i w tym przypadku jest to Blog. Owa klasa musi mieć możliwość przyjmowania obiektów nasłuchujących typu MailObserver. Dodatkowo w klasie występuje wątek symulowania działania operacji. Ponadto w wątku losowany jest czas wysyłania komunikatu do użytkownika, który stanowi losowy ciąg tekstowy. (linia 20-48 kodu)
  4. Inicjalizacja obiektu i uruchomienia przykładu polega na utworzenie instancji klasy Blog, a następnie przypisaniu kilku użytkowników, którzy będą go nasłuchiwali. (linia 50-57 kodu).
Wzorzec projektowy: obserwator

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Przewiń do góry