Stworzenie Fasady, ujednoliconego interfejsu przeznaczonego do obsługi przez klienta, ukrywa przed nim implementacje obsługiwanego obiektu oraz systemu do zarządzania jego logiką. Fasada skupia w sobie wykonywanie poleceń współpracujących ze sobą obiektów i ich logik systemowych upraszając i ograniczając zasób poleceń przeznaczonych do bezpośredniej obsługi przez klienta.
Jednym ze wzorców pomagających programistom w rozwiązywaniu powszechnych problemów jest Fasada, który umożliwia uproszczenie interakcji z złożonym systemem poprzez dostarczenie jednego, uproszczonego interfejsu. Oddzielenie klienta od reszty systemu zapewnione jest poprzez stworzenie klasy Fasady:

Do wykonywania zaimplementowanej logiki przez fasadę, służą funkcje publiczne, które zawierają zestaw poleceń z klas odseparowanych od klienta. Pozostają one jedynie w zasięgu działania samej fasady poprzez ograniczenie ich zasięgu – usunięcie modyfikatorów dostępu.
Wzorzec Fasada jest strukturalnym wzorcem projektowym, który dostarcza jednolite, uproszczone interfejsy do zestawu interfejsów w podsystemie. Pomaga to ukryć złożoność podsystemu, dzięki czemu klient nie musi znać wszystkich szczegółów jego implementacji. Wzorzec ten promuje zasadę enkapsulacji, a także ułatwia utrzymanie i rozwijanie systemu:
public class RobotFacade {
Robot robot;
RobotControl robotControl;
public RobotFacade() {
robot = new Robot();
robotControl = new RobotControl();
}
public void makeRobotMoves() {
robot.authorizePersonel();
if(robotControl.validateAuthorizationCoin()) {
robot.setDetailsOfTheProductionProcess();
if(robotControl.evaluateProgram()) {
robot.startRobot();
robotControl.runRobot();
}
}
}
}
class Robot {
void authorizePersonel() {
System.out.println("Use authorization coin to gain access to the control system of the robot.");
}
void setDetailsOfTheProductionProcess() {
System.out.println("Process data trasfered to the control system.");
}
void startRobot() {
System.out.println("Processing start command.");
}
}
class RobotControl {
boolean validateAuthorizationCoin() {
System.out.println("Access granted to the control system.");
return true;
}
boolean evaluateProgram() {
System.out.println("Moves sequence accepted. Robot ready to operate");
return true;
}
void runRobot() {
System.out.println("Process start.");
}
}
Korzyści zastosowania wzorca Fasada:
- Ułatwienie Użycia Złożonych Systemów
Fasada dostarcza jednolity interfejs, który upraszcza dostęp do złożonych systemów, co ułatwia korzystanie z nich.
- Enkapsulacja
Klient nie musi znać wszystkich szczegółów implementacyjnych podsystemu. Wzorzec Fasada pozwala na enkapsulację tych szczegółów.
- Łatwe Utrzymanie
Zmiany w implementacji podsystemu mogą być łatwiejsze do wprowadzenia, ponieważ klient korzysta tylko z interfejsu fasady.
Podsumowanie:
Wzorzec Fasada jest potężnym narzędziem w projektowaniu oprogramowania, szczególnie gdy mamy do czynienia z złożonymi systemami. W języku Java można łatwo zaimplementować Fasadę, aby zapewnić jednolite i łatwe w użyciu API dla klientów, ukrywając jednocześnie złożoność implementacyjną systemu. Zastosowanie wzorca Fasada przyczynia się do lepszej czytelności kodu, łatwiejszego utrzymania i elastyczności w rozwoju oprogramowania.
