Junior — Middle
Можеш ли да дадеш пример как се прилага патърнът адаптер в софтуерното инженерство?
sobes.tech AI
Отговор от AI
Патърнът адаптер позволява на обекти с несъвместими интерфейси да работят заедно, преобразувайки интерфейса на един клас в интерфейса, очакван от клиента.
Пример на Java: да предположим, че имаме интерфейс MediaPlayer с метод play(String audioType, String fileName), а има клас AdvancedMediaPlayer с методи playVlc(String fileName) и playMp4(String fileName). За да използваме AdvancedMediaPlayer чрез MediaPlayer, създаваме адаптер:
// Целеви интерфейс
interface MediaPlayer {
void play(String audioType, String fileName);
}
// Съществуващ интерфейс
interface AdvancedMediaPlayer {
void playVlc(String fileName);
void playMp4(String fileName);
}
// Конкретни реализации
class VlcPlayer implements AdvancedMediaPlayer {
public void playVlc(String fileName) {
System.out.println("Възпроизвеждане на VLC файл: " + fileName);
}
public void playMp4(String fileName) { }
}
class Mp4Player implements AdvancedMediaPlayer {
public void playVlc(String fileName) { }
public void playMp4(String fileName) {
System.out.println("Възпроизвеждане на MP4 файл: " + fileName);
}
}
// Адаптер
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);
}
}
}
// Клиент
class AudioPlayer implements MediaPlayer {
MediaAdapter mediaAdapter;
public void play(String audioType, String fileName) {
if(audioType.equalsIgnoreCase("mp3")) {
System.out.println("Възпроизвеждане на MP3 файл: " + fileName);
} else if(audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")) {
mediaAdapter = new MediaAdapter(audioType);
mediaAdapter.play(audioType, fileName);
} else {
System.out.println("Невалиден тип медия: " + audioType);
}
}
}
Така, AudioPlayer използва MediaAdapter за възпроизвеждане на формати, които директно не поддържа, осигурявайки съвместимост на интерфейсите.