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.