Il Facade nasconde le complessità del sistema e fornisce un’interfaccia al client mediante la quale può accedere al sistema. Questo tipo di design pattern rientra nella tipologia di pattern Strutturali poiché aggiunge un’interfaccia al sistema esistente per nascondere la sua complessità.

Facade

Questo pattern prevede una singola classe che fornisce metodi semplificati richiesti dal client e delega le chiamate ai metodi delle classi di sistema esistenti.

DIAGRAMMA UML

facade

 

IMPLEMENTAZIONE

Per implementare il pattern creiamo una interfaccia Figura e relative classi che la implementano, dopo di che creiamo la classe Facade che delegherà la creazione degli oggetti alle relative classi.

Step 1: Creiamo l’interfaccia

public interface Figura {
    void disegna();
}

Step 2: Creiamo le classi concrete che la implementano

Cerchio.java

public class Cerchio implements Figura {

    @Override
    public void disegna() {
        System.out.println("[CERCHIO]: disegna()");
    }
}

Quadrato.java

public class Quadrato implements Figura {

    @Override
    public void disegna() {
        System.out.println("[QUADRATO]: disegna()");
    }
}

Rettangolo.java

public class Rettangolo implements Figura {

    @Override
    public void disegna() {
        System.out.println("[RETTANGOLO]: disegna()");
    }
}

Step 3: Creiamo la classe Facade


public class Facade {
    private Figura cerchio;
    private Figura rettangolo;
    private Figura quadrato;

    public Facade() {
        cerchio = new Cerchio();
        rettangolo = new Rettangolo();
        quadrato = new Quadrato();
    }

    public void disegnaCerchio(){
        System.out.println("[FACADE]: disegnaCerchio()");
        cerchio.disegna();
    }
    public void disegnaRettangolo(){
        System.out.println("[FACADE]: disegnaRettangolo()");
        rettangolo.disegna();
    }
    public void disegnaQuadrato(){
        System.out.println("[FACADE]: disegnaQuadrato()");
        quadrato.disegna();
    }
}

Step 4: Creiamo il main

public class Main {
    public static void main(String[] args) {
        Facade facade = new Facade();

        facade.disegnaCerchio();
        facade.disegnaRettangolo();
        facade.disegnaQuadrato();
    }
}

Step 5: Output

[FACADE]: disegnaCerchio()
[CERCHIO]: disegna()
[FACADE]: disegnaRettangolo()
[RETTANGOLO]: disegna()
[FACADE]: disegnaQuadrato()
[QUADRATO]: disegna()

 

LINK UTILI