Design Pattern #6 – Adapter

95 Views 0 Comment

L’ adapter funziona come un ponte tra due interfacce incompatibili. Questo tipo di design pattern rientra nella tipologia Strutturali poiché combina la capacità di due interfacce indipendenti. Il pattern delega l’unione delle funzionalità delle interfacce ad una singola classe. adapter

Un esempio potrebbe essere un lettore di schede che funge da adattatore tra la scheda di memoria e un pc. Dimostreremo l’uso del pattern tramite il seguente esempio in cui un lettore audio può riprodurre solo file mp3 e desidera utilizzare un lettore audio avanzato in grado di riprodurre file vlc e mp4.

DIAGRAMMA UML ADAPTER

Adapter

IMPLEMENTAZIONE

Avremo un’interfaccia LettoreMultimediale e la relativa classe concreta LettoreAudio.  Questa classe può riprodurre file audio in formato mp3. Dopo di chè avremo un’altra interfaccia LettoreMultimedialeAvanzato e relative classi concrete che possono riprodurre file in formato vlc e mp4.

Per fare in modo che LettoreMultimediale legga anche altri formati, creiamo una classe adattatore AdattatoreMultimediale che implementa l’interfaccia LettoreMultimediale e utilizza oggetti di tipo LettoreMultimedialeAvanzato per riprodurre il formato richiesto. La classe Main utilizzerà la classe LettoreAudio per riprodurre i vari formati.

Step 1: Creiamo le interfacce LettoreMultimediale e LettoreMultimedialeAvanzato

LettoreMultimediale.java

public interface LettoreMultimediale {
    public void esegui(String tipoFile, String nomeFile);
}

LettoreMultimedialeAvanzato.java

public interface LettoreMultimedialeAvanzato {
    public void eseguiVlc(String nomeFile);
    public void eseguiMp4(String nomeFile);
}

Step 2: Creiamo le classi concrete che implementano le interfacce

lettoreVlc.java

public class LettoreVlc implements LettoreMultimedialeAvanzato{
    @Override
    public void eseguiVlc(String nomeFile) {
        System.out.println("[LETTOREVLC] : Riproduzione file Vlc:  "+ nomeFile);
    }

    @Override
    public void eseguiMp4(String nomeFile) {
    }
}

lettoreMp4.java

public class LettoreMp4 implements LettoreMultimedialeAvanzato {
    @Override
    public void eseguiVlc(String nomeFile) {
    }

    @Override
    public void eseguiMp4(String nomeFile) {
        System.out.println("[LETTOREVLC] : Riproduzione file mp4:  "+ nomeFile);
    }
}

Step 3: Creiamo la classe Adapter

public class AdattatoreMultimediale implements LettoreMultimediale{

    LettoreMultimedialeAvanzato lettoreMultimedialeAvanzato;

    public AdattatoreMultimediale(String tipoFile){
        if(tipoFile.equalsIgnoreCase("vlc") ){
            lettoreMultimedialeAvanzato = new LettoreVlc();
        }else if (tipoFile.equalsIgnoreCase("mp4")){
            lettoreMultimedialeAvanzato = new LettoreMp4();
        }
    }

    @Override
    public void esegui(String tipoFile, String nomeFile) {
        if(tipoFile.equalsIgnoreCase("vlc")){
            lettoreMultimedialeAvanzato.eseguiVlc(nomeFile);
        }
        else if(tipoFile.equalsIgnoreCase("mp4")){
            lettoreMultimedialeAvanzato.eseguiMp4(nomeFile);
        }
    }
}

Step 4: Creiamo la classe che implementa LettoreMultimediale

public class LettoreAudio implements LettoreMultimediale {
    AdattatoreMultimediale adattatoreMultimediale;

    @Override
    public void esegui(String tipoFile, String nomeFile) {
        if(tipoFile.equalsIgnoreCase("mp3")){
            System.out.println("[LETTOREAUDIO]: File mp3 eseguito: " + nomeFile);
        }

        else if(tipoFile.equalsIgnoreCase("vlc") || tipoFile.equalsIgnoreCase("mp4")){
            adattatoreMultimediale = new AdattatoreMultimediale(tipoFile);
            adattatoreMultimediale.esegui(tipoFile, nomeFile);
        }

        else{
            System.out.println("[LETTOREAUDIO]: File: " + tipoFile + " in formato non supportato");
        }
    }
}

Step 5: Creiamo la classe main

public class Main {
    public static void main(String[] args) {
        Multimedia file1 = new Multimedia("Alone", "mp3");
        Multimedia file2 = new Multimedia("Over the Horizon", "mp4");
        Multimedia file3 = new Multimedia("50 special Video", "vlc");
        Multimedia file4 = new Multimedia("Corrupted", "avi");
        LettoreAudio lettoreAudio = new LettoreAudio();

        lettoreAudio.esegui(file1.getFormato(), file1.getNome());
        lettoreAudio.esegui(file2.getFormato(), file2.getNome());
        lettoreAudio.esegui(file3.getFormato(), file3.getNome());
        lettoreAudio.esegui(file4.getFormato(), file4.getNome());
    }
}

Step 6: Output

[LETTOREAUDIO]: File mp3 eseguito: Alone
[LETTOREVLC] : Riproduzione file mp4:  Over the Horizon
[LETTOREVLC] : Riproduzione file Vlc:  50 special Video
[LETTOREAUDIO]: File: avi in formato non supportato

 

LINK UTILI


Continua a seguirci su:

Facebook Instagram Telegram Rss
0 Comments

Leave a Comment