Brook Preloader

Il design pattern Façade in Java

Il design pattern Façade è un pattern di progettazione che offre un’interfaccia semplificata per una struttura di classe complessa con l’obiettivo di nasconderne l’implementazione.

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.