Zpo-5-wyk-Slajd45

Z Studia Informatyczne
Wersja z dnia 06:50, 21 sie 2006 autorstwa Bwalter (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Middle Man

Middle Man


Ten przykry zapach oznacza sytuację, w której cała odpowiedzialność pewnej klasy sprowadza się do delegowania wywołań do innych klas. Jest to zatem sytuacja odwrotna do problemu o nazwie Message Chains – w tamtym przypadku liczba pośrednich odwołań była zbyt mała, w tym – jest zbyt duża. Oczywiście, istnieją sytuacje, w którym klasa będąca jedynie tłumaczem jednych metod na drugie ma uzasadnienie (np. wzorzec projektowy Adapter), ale są to wyjątki. Generalnie, klasa-pośrednik posiada zbyt mało odpowiedzialności, aby samodzielnie funkcjonować.

Rozwiązanie polega na usunięciu pośrednika, które można wykonać na kilka różnych sposobów. Można zastąpić wywołania poprzez pośrednika wywołaniami bezpośrednimi, co prowadzi do zwiększenia liczby powiązań między klientem (klasą wywołującą) a serwerem (klasą faktycznie obsługującą żądanie). Można usunąć zbędne metody delegujące wewnątrz pośrednika, co jednak jest tylko rozwiązaniem częściowym. Wreszcie, można zastąpić pośrednika dostępnego przez delegację podklasą – czyli zmienić delegowanie wywołań na rzecz ich dziedziczenia i pokrywania. To ostatnie rozwiązanie jest także stosowane przez jedną z wersji wzorca projektowego Adapter.


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