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: design patterns, observer, obserwator, Wzorce projektowe
Kategoria: Wzorce projektowe
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 :}
po przeczytaniu początku komentarze zaczynałem się bać :)) tak będę starał opisać każdy :)
thx