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à.
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
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()
0 Comments