Zpo-9-wyk-Slajd24: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Linia 1: Linia 1:
==Observer: konsekwencje==
==Przykład==


[[Image:zpo-9-wyk-Slajd24.PNG|Observer: konsekwencje]]
[[Image:zpo-9-wyk-Slajd24.PNG|Przykład]]




Wzorzec Observer pozwala na znaczne ograniczenie powiązań i zależności pomiędzy obserwatorami i obiektem obserwowanym. Wprawdzie obiekt obserwowany posiada referencje do obserwatorów, jednak  wiedza jest ograniczona tylko do znajomości interfejsu Observer. Także obserwatory nie muszą znać obiektu Subject w momencie wywołania ich metody ''update'' ''(),'' ponieważ otrzymują powiadomienia asynchroniczne.  
Przykładem jest warunek uzależniający otwarcie kredytu posiadaniem otwartego konta, stanem salda przekraczającym 3000 PLN oraz brakiem innego otwartego kredytu. To wyrażenie jest dość złożone, dlatego można podzielić je na mniejsze fragmenty i zapamiętać ich wartości w nowych zmiennych lokalnych. Zapis wyrażenia oryginalnego stał się zatem znacznie prostszy.


Dzięki ogólności interfejsu Observer obiekty uczestniczące we wzorcu mogą należeć do różnych warstw abstrakcji. Wzorzec pozwala zachować spójność pomiędzy warstwami aplikacji, ponieważ informacje o zmianach w jednej warstwie są przekazywane natychmiast do pozostałych obiektów. Jest to szczególnie często jest wykorzystywane do komunikacji w wielu systemach okienkowych. Zamiennie zamiast nazwy Observer wykorzystuje się nazwę Listener.
W efekcie przekształcenia fragmenty wyrażenia zostały wydzielone do zmiennych lokalnych. Jednak zmienne te utrudniają dalsze operacje na metodzie (m.in. jej podział), dlatego będą musiały być w kolejnych refaktoryzacjach przekształcane do postaci metod.
 
Ponieważ ilość informacji przekazywanych obiektom Observer może istotnie wpływać na wydajność systemu, dlatego istnieją dwa podejścia do implementacji tego wzorca. W modelu ''push'' każdy obserwator otrzymuje w postaci parametru metody ''update'' ''()'' pełną informację o stanie obiektu Subject. W modelu ''pull'' obserwatory otrzymują tylko referencję do obiektu Subject, dzięki której mogą następnie odpytać go o szczegóły dotyczące zmiany. Ten ostatni model jest zatem znacznie lepiej skalowalny, szczególnie w przypadku wywoływania tych metod w środowisku rozproszonym.




[[zpo-9-wyk-Slajd23 | << Poprzedni slajd]] | [[zpo-9-wyk-toc|Spis treści ]] | [[zpo-9-wyk-Slajd25 | Następny slajd >>]]
[[zpo-9-wyk-Slajd23 | << Poprzedni slajd]] | [[zpo-9-wyk-toc|Spis treści ]] | [[zpo-9-wyk-Slajd25 | Następny slajd >>]]

Aktualna wersja na dzień 18:05, 4 lis 2006

Przykład

Przykład


Przykładem jest warunek uzależniający otwarcie kredytu posiadaniem otwartego konta, stanem salda przekraczającym 3000 PLN oraz brakiem innego otwartego kredytu. To wyrażenie jest dość złożone, dlatego można podzielić je na mniejsze fragmenty i zapamiętać ich wartości w nowych zmiennych lokalnych. Zapis wyrażenia oryginalnego stał się zatem znacznie prostszy.

W efekcie przekształcenia fragmenty wyrażenia zostały wydzielone do zmiennych lokalnych. Jednak zmienne te utrudniają dalsze operacje na metodzie (m.in. jej podział), dlatego będą musiały być w kolejnych refaktoryzacjach przekształcane do postaci metod.


<< Poprzedni slajd | Spis treści | Następny slajd >>