Façade
Per i dettagli di teoria CLICCA QUI
Ecco due esempi in meta-codice in Java per comprendere meglio il funzionamento del pattern:
Il compressore video
public class VideoConverter {
private VideoFile file;
private MkvCompression mkvCompr;
private MP4Compression mp4Compr;
public VideoConverter() {
this.file = new VideoFile();
this.mkvCompr = new MkvCompression();
this.mp4Compr = new MP4Compression();
}
public void convertToMkv() {
file.readFile();
mkvCompr.compress(file);
file.writeFile("mkv");
}
public void convertToMp4() {
file.readFile();
mp4Compr.compress(file);
file.writeFile("mp4");
}
}
In questo esempio, la classe VideoConverter rappresenta la façade che fornisce un’interfaccia semplificata per le classi interne VideoFile, MkvCompression e MP4Compression. Queste ultime classi rappresentano le classi complesse che compongono il sistema.
L’utente finale utilizza solo la classe VideoConverter per convertire un file video in Mkv o MP4, nascondendo la complessità della struttura sottostante.
La classe di scrittura su file
class FileReader {
public void readFile(String fileName) {
System.out.println("Reading file: " + fileName);
}
}
class FileWriter {
public void writeFile(String fileName, String content) {
System.out.println("Writing to file: " + fileName + " with content: " + content);
}
}
class FileFacade {
private FileReader fileReader;
private FileWriter fileWriter;
public FileFacade() {
this.fileReader = new FileReader();
this.fileWriter = new FileWriter();
}
public void readFile(String fileName) {
fileReader.readFile(fileName);
}
public void writeFile(String fileName, String content) {
fileWriter.writeFile(fileName, content);
}
}
public class Main {
public static void main(String[] args) {
FileFacade fileFacade = new FileFacade();
fileFacade.readFile("file.txt");
fileFacade.writeFile("file.txt", "Ciao Dev!");
}
}
In questo esempio, abbiamo una classe FileReader che ha la responsabilità di leggere un file, una classe FileWriter che ha la responsabilità di scrivere un file con del contenuto, e una classe FileFacade che funge da façade per entrambe le classi.
La classe FileFacade è la nostra effettiva Façade, fornisce un’interfaccia semplificata per l’utente, che non ha bisogno di conoscere i dettagli delle classi FileReader e FileWriter.
L’utente può semplicemente chiamare i metodi readFile e writeFile della façade per effettuare la lettura e la scrittura dei file.