Wzorzec projektowy Facade (Fasada) należy do grupy wzorców strukturalnych. Jego rolą jest uproszczenie złożonego interfejsu lub jego uporządkowanie. Czasami występuje potrzeba skorzystania z gotowego, niejednokrotnie rozbudowanego systemu albo biblioteki. Jednocześnie nie ma potrzeby wykorzystania całego dostępnego API lub to API jest nieprzejrzyste. Buduje się wtedy obiekty pośredniczące pomiędzy starym systemem, a systemem który z niego korzysta.

Kiedy wykorzystuje się wzorzec Fasada:

  • aby ukryć złożoność tworzonego systemu przez dostarczenie udokumentowanego, publicznego API. Definiujemy dozwolony dostęp do API przez co redukujemy ilość możliwych przypadków błędnego użycia. Programiści muszą przyswoić sobie API fasady a nie całego systemu. Bardzo przydaje się to wtedy, gdy biblioteka jest długo rozwijana i jest duża ilość przedawnionych metod. Fasada odświerza API skupiając się jedynie na operacjach aktualnych.
  • aby uprościć używanie cudzej biblioteki. Definiuje się wygodne, dostosowane do konkretnego zastosowania metody pośredniczące między systemami. Zwiększa się czytelność kodu.
  • aby poprawić użyteczność biblioteki ze źle skonstruowanym API przez stworzenie nakładki, która dostarcza nowe, uporządkowane API.

Zasada działania:

Fasada jest obiektem pośredniczącym między klasami klienta wywołującego operacje a klasami, które te operacje wykonują. Najczęściej Fasadę definiuje się jako Singleton, ponieważ w systemie jest tylko jedna. Obiekt fasady wie, które klasy ukrywanego systemu są odpowiedzialne za wykonanie danego żądania i przekazuje odpowiednie wywołania do właściwych obiektów systemu. Ukrywane klasy wykonują zlecone operacje nie wiedząc nawet, że jest coś takiego w systemie jak Fasada.

Przykład:

.