Fasada (facade)

Posted on by 0 comment

W dzisiejszym artykule na ząb wrzucimy kolejny wzorzec programowania, należy on do grupy strukturalnych wzorców programowania. Kto nie pamięta, przypominam, że wzorce z tej grupy, regulują powiązania między klasami w systemie. Omawiany wzorzec to fasada.

Fasada

Nazwa wzorca nawiązuję do rzeczywistej fasady jaką możemy zobaczyć na budynkach. Idąc ulicą widzimy zewnętrzną część budynku, zwykle nie mamy możliwości zaglądnięcia do środka. Gdyby, postawiono nas przed jakimkolwiek, nieznajomym nam budynkiem i nakazano sporządzenie jego opisu, co by się w nim zawarło? Tylko jego zewnętrzna charakterystyka, nie bylibyśmy w stanie podejrzeć jego zawartości, posiadanego wyposażenia, ilości pokoi, łazienek itp., ale dobrze sporządzona zewnętrzna charakterystyka, pozwoliłaby na odnalezienie tego budynku, każdemu, kto byłby w posiadaniu tego opisu.

Podobnie jest z omawianym dzisiaj wzorcem, otrzymujemy klasę, która ma zdefiniowane funkcjonalności. Dzięki nim, mamy dostęp do składowych większego systemu, a może składowych wielu systemów. Udostępniona nam fasada jest naszym pośrednikiem, pomiędzy zaszytym systemem, a nami. Jest ona nam potrzebna, aby wywołać funkcję innej klasy.

Dzięki takiemu rozwiązaniu, możemy dostarczyć interfejs, który będzie zrozumiały, dla mniej zaawansowanej osoby, możemy dostarczyć, tylko część funkcjonalności lub wystawić je dla klienta w taki sposób, że uzyskamy pewność, że największa starania, nie wyrządzą naszemu systemowi szkody.

Dobrym przykładem, mogą być tu ustawienia trybów zachowania aut z wyższej półki. Kierowca, ma do dyspozycji tylko, pokrętło z napisami (Sport, Wet, .. itp.), każda zmiana ustawienia pociąga za sobą szereg zmian w konfiguracji pracy auta, co by się wydarzyło, gdybyśmy zamiast jednego pokrętła, otrzymali 100 przycisków, wywołujących zmianę w pracy każdego podzespołu z osobna?

Diagram klas

FasadaWzorzec projektowy - fasada

Wzorzec projektowy – fasada

Powyżej widzimy klasę, która organizuje funkcjonalności innych klas w dwóch metodach. Klientowi łatwiej jest się posługiwać metodą ObliczMedianę(), niż aranżować cały proces za pomocą składowych klasy ObliczenieMediany. Jest to czysto abstrakcyjny diagram, ilustrujący sens wzorca.

Kod źródłowy

Zaprojektujmy klasę, która posiada metody zezwalającej jej na obliczenie pierwiastków wielomianu kwadratowego. Klasa będzie zawierała trzy metody, a każda będzie odpowiedzialna za jeden „stan” delty.

Zajmijmy się zbudowaniem klasy ObliczaniePierWielom, której funkcjonalności udostępnimy dla klienta.

Zbudujmy teraz klasę Fasada, która będzie upraszczać skomplikowaną, powyższą klasę.

Wszystkie przypadki zostały zebrane w jednej metodzie ObliczPierWieomianu, a dostęp do metod klasy, którą chcemy „ukryć’ uzyskujemy poprzez utworzenie obiektu tej klasy.

Na koniec główna metoda programu, a w niej, użycie skomponowanej na potrzeby klienta klasy Fasada.

Podsumowanie

Kolejny strukturalny wzorzec za nami, a raczej od dzisiaj z nami. Dla przypomnienia, Fasada pomocna jest wtedy, kiedy musimy dostarczyć komuś funkcjonalności naszego, wielkiego systemu. Dzięki fasadzie, możemy wybrać, które funkcjonalności projektu udostępnić, możemy je przedstawić w taki sposób, że klient, kolega z zespołu itp., bez zbędnego zagłębiania się w zasady pracy naszego systemu, będzie w stanie go zrozumieć, używać.

Wpis należy do serii postów o wzorcach projektowych.

Dodaj komentarz