Junior — Middle
Можеш ли да наведеш пример како се примењује патерн адаптер у софтверском инжењерству?
sobes.tech АИ
Одговор од АИ
Шаблон адаптер омогућава објектима са некомпатибилним интерфејсима да раде заједно, претварајући интерфејс једне класе у интерфејс који очекује клијент.
Пример на Јави: претпоставимо да имамо интерфејс 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 за репродукцију формата које директно не подржава, обезбеђујући компатибилност интерфејса.