|
|
Linia 1: |
Linia 1: |
| ==Chain of Responsibility: konsekwencje== | | ==Przykład== |
|
| |
|
| [[Image:zpo-10-wyk-Slajd13.PNG|Chain of Responsibility: konsekwencje]] | | [[Image:zpo-10-wyk-Slajd13.PNG|Przykład]] |
|
| |
|
|
| |
|
| Zaletą tego wzorca jest znaczne ograniczenie powiązań pomiędzy klientem i każdym z obiektów Handler. Klient, przekazując żądanie, nie wie, który z obiektów Handler będzie je w rzeczywistości obsługiwał. Poszczególne ogniwa łańcucha są zorganizowane w postaci prostej kolejki jednokierunkowej, a ich wiedza o sobie nawzajem ogranicza się do abstrakcyjnego typu ogniwa. Nie znają swoich zadań ani klas, jakie implementują.
| | Jako przykład rozpatrzmy relację pomiędzy książką i tomami, które wchodzą w jej skład. W obecnej implementacji Tom posiada referencję do Książki, natomiast Książka nie zna Tomów, z których się składa. |
| | |
| Taka struktura pozwala elastycznie przydzielać odpowiedzialność do poszczególnych ogniw: każdy z nich zajmuje się obsługą żądań jednego typu, a rozszerzenie łańcucha o kolejne elementy nie wpływa na sposób przetwarzania przez niego żądań. To z kolei przyczynia się do łatwiejszego testowania każdego ogniwa łańcucha z osobna: wystarczy zweryfikować, czy poprawnie obsługuje on żądania jednego typu.
| |
| | |
| Wadą takiej konstrukcji łańcucha jest brak gwarancji obsługi żądania: kolejne ogniwa mogą zrezygnować z zajęcia się nim. Co więcej, informacja o tym fakcie nie jest przekazywana klientowi. W tym celu stosuje się rozmaite rozwiązania pośrednie: umieszczając informację o obsłudze wewnątrz żądania (wówczas brak takiej informacji oznacza jego nieobsłużenie) lub zmieniając nieco strukturę przetwarzania.
| |
| | |
| Ponadto, błąd w implementacji filtra może skutkować nieprzekazaniem sterowania do następnika i przerwaniem łańcucha. Aby zminimalizować to ryzyko, w niektórych implementacjach klasa bazowa Filter posiada zaimplementowany na stałe mechanizm przekazywania sterowania do następnika, a programiście udostępniona jest tylko metoda dokonująca faktycznej obsługi żądania.
| |
|
| |
|
|
| |
|
| [[zpo-10-wyk-Slajd12 | << Poprzedni slajd]] | [[zpo-10-wyk-toc|Spis treści ]] | [[zpo-10-wyk-Slajd14 | Następny slajd >>]] | | [[zpo-10-wyk-Slajd12 | << Poprzedni slajd]] | [[zpo-10-wyk-toc|Spis treści ]] | [[zpo-10-wyk-Slajd14 | Następny slajd >>]] |
Aktualna wersja na dzień 17:51, 4 lis 2006
Przykład
Jako przykład rozpatrzmy relację pomiędzy książką i tomami, które wchodzą w jej skład. W obecnej implementacji Tom posiada referencję do Książki, natomiast Książka nie zna Tomów, z których się składa.
<< Poprzedni slajd | Spis treści | Następny slajd >>