Aplikacje internetowe

Bełdziowe spojrzenie na aplikacje internetowe

Obserwator

Obserwator (ang. Observer) jest jednym z najpopularniejszych wzorców projektowych. Niemal w każdym momencie korzystania z komputera mamy z nim kontakt. Jego zadaniem jest informowanie o zmianie stanu obiektu inne zainteresowane obiekty.

Jak wspomniałem z wzorcem obserwator mamy do czynienia niemal w każdym momencie korzystania z komputera. Wzorzec ten jest podstawą programowania zdarzeniowego, a co za tym idzie aplikacji z graficznym interfejsem (GUI).

Aby móc z niego skorzystać należy stworzyć dwa rodzaje klas. Pierwszą pełniącą rolę obiektu obserwowanego, która informuje o zmianie swojego stanu oraz drugą będącą obiektem obserwującym oczekującym na informację o zmianie stanu.

public interface Obserwowany 
{
   public void dodajObserwatora( Obserwator obserwator );
   public void usunObserwatora( Obserwator obserwator );
   public void powiadomObserwatorow();
}

public interface Obserwator
{
   public void uaktualnij();
}

Zobacz więcej kodu

Powyższe interfejsy przedstawiają metody wymagane przez obie klasy do poprawnego zaimplementowania wzorca. Metody dodajObserwatora oraz usunObserwatora odpowiadają za zarządzanie listą obserwatorów. Lista ta w zależności od wykorzystywanego języka jest implementowana jako dowolna liniowa struktura danych (kolejka, stos, tablica). Metoda powiadomObserwatorow wywoływana jest w chwili zmiany stanu obiektu. Jej zadaniem jest iteracja po elementach listy obserwatorów oraz wywołanie metody uaktualnij każdego z nich.

Skoro już wiemy w jaki sposób obserwator jest informowany o zmianie stanu obserwowanego obiektu należy przyjrzeć się sposobowi przekazywania nowej wartości stanu. Możemy tego dokonać na dwa sposoby. Pierwszym, a zarazem najczęściej używanym (za sprawą wykorzystywania go w celu obsługi zdarzeń) jest przekazanie nowego stanu jako parametr metody uaktualnij.

private function init( ):void
{
   TextInput.addEventListener( Event.CHANGE, TextInputChange );
}
			
private function TextInputChange( event :Event ): void
{
   Alert.show( event.currentTarget.text);
}

Opis: Przykład przekazywania nowego stanu przez parametr (Flex)

Drugim sposobem jest pobranie nowych danych przez wywołanie odpowiedniej metody klasy obserwowanej. Rozwiązanie to jest bardziej elastyczne, gdyż sam obserwator decyduje o działaniu podjętym w chwili zmiany stanu. Przykład tego sposobu powiadamiania dostępny jest pod adresem podanym przy kodzie interfejsów z początku notki.

Dzięki wzorcowi obserwatora możemy dodać możliwości obsługi zdarzeń w chwili, gdy sam język nie wspiera paradygmatu programowania zdarzeniowego. Przykładem tego może być klasa Event frameworka Kohana. Podczas zapoznawania się z nią przydatna może okazać się dokumentacja Kohany.


Tagi: , , ,
Kategoria: Wzorce projektowe


2 komentarze

  1. zwykle nie zostawiam komentarzy ale tym razem sie pokusze :}

    mam nadzieje stary ze krotko opiszesz kazdy z wzorcow
    bo wielu osobom to sie przyda, niestety ja mialem problemy z wytlumaczeniem tego moim znajomym, chociaz sam rozumiem o co chodzi

    jezeli chodzi o design patterns to jest to niezwykle wazna rzecz w programowaniu w zespole przy duzych projektach tylko ze nigdzie tego nie ucza, i wiele osob nie ma pojecia o tym

    notatka krotka, ale przez to przystepna i przyjemna
    powodzenia :}

  2. po przeczytaniu początku komentarze zaczynałem się bać :)) tak będę starał opisać każdy :)

    thx

Dodaj komentarz