Junior — Middle
Kannst du ein Beispiel geben, wie das Adapter-Muster in der Softwaretechnik angewendet wird?
sobes.tech KI
Antwort von AI
Das Adapter-Muster ermöglicht es Objekten mit inkompatiblen Schnittstellen, zusammenzuarbeiten, indem es die Schnittstelle einer Klasse in die vom Client erwartete Schnittstelle umwandelt.
Beispiel in Java: Angenommen, wir haben eine Schnittstelle MediaPlayer mit der Methode play(String audioType, String fileName), und eine Klasse AdvancedMediaPlayer mit den Methoden playVlc(String fileName) und playMp4(String fileName). Um AdvancedMediaPlayer über MediaPlayer zu verwenden, erstellen wir einen Adapter:
// Ziel-Schnittstelle
interface MediaPlayer {
void play(String audioType, String fileName);
}
// Bestehende Schnittstelle
interface AdvancedMediaPlayer {
void playVlc(String fileName);
void playMp4(String fileName);
}
// Konkrete Implementierungen
class VlcPlayer implements AdvancedMediaPlayer {
public void playVlc(String fileName) {
System.out.println("VLC-Datei wird abgespielt: " + fileName);
}
public void playMp4(String fileName) { }
}
class Mp4Player implements AdvancedMediaPlayer {
public void playVlc(String fileName) { }
public void playMp4(String fileName) {
System.out.println("MP4-Datei wird abgespielt: " + fileName);
}
}
// Adapter
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);
}
}
}
// Kunde
class AudioPlayer implements MediaPlayer {
MediaAdapter mediaAdapter;
public void play(String audioType, String fileName) {
if(audioType.equalsIgnoreCase("mp3")) {
System.out.println("MP3-Datei wird abgespielt: " + fileName);
} else if(audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")) {
mediaAdapter = new MediaAdapter(audioType);
mediaAdapter.play(audioType, fileName);
} else {
System.out.println("Ungültiger Medientyp: " + audioType);
}
}
}
Auf diese Weise verwendet AudioPlayer den MediaAdapter, um Formate abzuspielen, die es nicht direkt unterstützt, und sorgt so für Kompatibilität der Schnittstellen.