Junior — Middle
¿Puedes dar un ejemplo de cómo se aplica el patrón adaptador en ingeniería de software?
sobes.tech AI
Respuesta de la IA
El patrón adaptador permite que objetos con interfaces incompatibles trabajen juntos, transformando la interfaz de una clase en la interfaz que espera el cliente.
Ejemplo en Java: supongamos que tenemos una interfaz MediaPlayer con el método play(String audioType, String fileName), y una clase AdvancedMediaPlayer con los métodos playVlc(String fileName) y playMp4(String fileName). Para usar AdvancedMediaPlayer a través de MediaPlayer, creamos un adaptador:
// Interfaz objetivo
interface MediaPlayer {
void play(String audioType, String fileName);
}
// Interfaz existente
interface AdvancedMediaPlayer {
void playVlc(String fileName);
void playMp4(String fileName);
}
// Implementaciones concretas
class VlcPlayer implements AdvancedMediaPlayer {
public void playVlc(String fileName) {
System.out.println("Reproduciendo archivo vlc: " + fileName);
}
public void playMp4(String fileName) { }
}
class Mp4Player implements AdvancedMediaPlayer {
public void playVlc(String fileName) { }
public void playMp4(String fileName) {
System.out.println("Reproduciendo archivo mp4: " + fileName);
}
}
// Adaptador
class MediaAdapter implements MediaPlayer {
AdvancedMediaPlayer advancedMusicPlayer;
public MediaAdapter(String audioType) {
if(audioType.equalsIgnoreCase("vlc")) {
advancedMusicPlayer = new VlcPlayer();
} else if(audioType.equalsIgnoreCase("mp4")) {
advancedMusicPlayer = new Mp4Player();
}
}
public void play(String audioType, String fileName) {
if(audioType.equalsIgnoreCase("vlc")) {
advancedMusicPlayer.playVlc(fileName);
} else if(audioType.equalsIgnoreCase("mp4")) {
advancedMusicPlayer.playMp4(fileName);
}
}
}
// Cliente
class AudioPlayer implements MediaPlayer {
MediaAdapter mediaAdapter;
public void play(String audioType, String fileName) {
if(audioType.equalsIgnoreCase("mp3")) {
System.out.println("Reproduciendo archivo mp3: " + fileName);
} else if(audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")) {
mediaAdapter = new MediaAdapter(audioType);
mediaAdapter.play(audioType, fileName);
} else {
System.out.println("Tipo de medio inválido: " + audioType);
}
}
}
Así, AudioPlayer usa MediaAdapter para reproducir formatos que no soporta directamente, asegurando la compatibilidad de interfaces.