Wzorzec Fasada

Słownik kwalifikacji INF.04 - Projektowanie, programowanie i testowanie aplikacji

Fasada to strukturalny wzorzec projektowy, którego celem jest udostępnienie prostego interfejsu do bardziej złożonego systemu klas, modułów lub bibliotek.

Zamiast zmuszać kod klienta do bezpośredniego korzystania z wielu obiektów i metod, tworzy się jedną klasę pośredniczącą — fasadę. Fasada ukrywa szczegóły działania podsystemu i udostępnia uporządkowane, łatwe w użyciu metody.

Do czego służy Fasada?

Wzorzec Fasada stosuje się, gdy:

  • system ma wiele klas i skomplikowaną strukturę,
  • użytkownik systemu powinien korzystać tylko z prostego API,
  • chcemy ograniczyć zależności między kodem klienta a szczegółami implementacji,
  • zależy nam na czytelności i łatwiejszym utrzymaniu kodu.

Przykład

class SystemPlatnosci {
    void autoryzuj() { }
}

class Magazyn {
    void sprawdzTowar() { }
}

class ZamowienieFacade {
    private SystemPlatnosci platnosci = new SystemPlatnosci();
    private Magazyn magazyn = new Magazyn();

    void zlozZamowienie() {
        magazyn.sprawdzTowar();
        platnosci.autoryzuj();
    }
}

Kod klienta wywołuje tylko:

new ZamowienieFacade().zlozZamowienie();

Nie musi znać szczegółów działania magazynu ani systemu płatności.

Najważniejsze cechy

  • należy do wzorców strukturalnych,
  • upraszcza dostęp do złożonego systemu,
  • zmniejsza liczbę zależności w kodzie klienta,
  • nie musi usuwać dostępu do klas podsystemu — tylko udostępnia wygodniejszą drogę użycia.

W pytaniach egzaminacyjnych definicja mówiąca o „uproszczonym interfejsie do złożonego systemu” najczęściej oznacza właśnie wzorzec Fasada.