Wzorzec fasada jest podobny trochę do adaptera oraz dekoratora. Ich cechą wspólna jest to, że są wzorcami strukturalnymi. Fasadę można na początku pomylić z adapterem. Podobnie jak adapter modyfikuje interfejs aby łatwiej nam było z niego korzystać. Jednak służy całkowicie do innych celów.

Przykład z życia wzięty

Weźmy sobie taki samochód z automatyczną skrzynią biegów. Nie chcę tu zagłębiać się w nowoczesne rozwiązania tylko wziąć na warsztat najprostszy model.

Samochód z automatyczną skrzynią biegów jest łatwiejszy w obsłudze niż ten z ręczną skrzynią. Pokusiłbym się o stwierdzenie, że ma prostszy interfejs. Dźwignie biegów przesuwamy na jazdę do przodu i naciskamy pedał gazu i jedzie. Nie martwimy się niczym więcej.

W samochodzie z ręczną skrzynią jest to bardziej skomplikowane. Naciśnij sprzęgło. Wrzuć pierwszy bieg. Puszczaj powoli sprzęgło i dodawaj gazu. Rozpędź silnik do pewnej liczby obrotów. Naciśnij sprzęgło. Wrzuć wyższy bieg. I tak dalej.

Początkującym kierowcom naprawdę sprawia to dużo problemów. Ale nie o jeżdżeniu samochodem a o fasadzie. Z całą odpowiedzialnością mogę powiedzieć, że mechanizm, który obsługuje automatyczną skrzynię biegów jest fasadą.

Koncepcja fasady

Upraszanie API aby były bardziej łatwiejsze w użyciu Zazwyczaj wzorzec wykorzystywany przy „refaktoryzacji” Zmniejszenie ilość zależności w kodzie Fasada nie hermetyzuje interfejsów bazowych. Cały czas mamy do nich dostęp.

Co to jest fasada?

Fasa jest wzorcem, który ma uprosić nam korzystanie ze skomplikowanego API. Załóżmy, że masz skomplikowany mechanizm powiadomień w swoim systemie. Integracja z mailem, z wewnętrznymi notyfikacjami, hubem notyfikacji mobilnych itd. za każdym razem wykonujesz sekwencje poleceń. Czemu by tego nie uprościć? Do tego właśnie celu służy fasada. Stwórz klase następnie metodę, SendNotify() i uprość swoje API. Fasada w takim przypadku łączy wiele podsystemów w jeden ujednolicony interfejs.

Przykład w praktyce

Projekt posiada kilka klas obsługujących powiadomienia.

Korzystanie z wielu interfejsów wprowadza pewien nie ład. Każde miejsce, w kodzie z którego chcemy wysłać powiadomienie zmusza nas do wstrzyknięcia aż 4 interfejsów. Uprośmy to trochę korzystając z fasady.

Zamiast korzystać z czterech różnych klas do wysyłania powiadomień, wykorzystuje teraz jedną. Klasy bazowe są właściwościami fasady, więc mogę bez problemu nadal z nich korzystać, jeżeli będzie taka potrzeba.