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. 
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

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











0 Comments