Wzorzec projektowy Fasada, ang. Facade

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:

Rys. 1. Schemat UML wzorca Fasada.

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.


Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *