Ответ
Adapter – структурный паттерн, позволяющий несовместимым интерфейсам работать вместе.
Пример:
// Интерфейс, который ожидает клиент
interface MediaPlayer {
fun play(audioType: String, fileName: String)
}
// Адаптируемый класс с другим интерфейсом
class AdvancedMediaPlayer {
fun playVlc(fileName: String) = println("Playing VLC: $fileName")
fun playMp4(fileName: String) = println("Playing MP4: $fileName")
}
// Адаптер
class MediaAdapter(private val advancedPlayer: AdvancedMediaPlayer) : MediaPlayer {
override fun play(audioType: String, fileName: String) {
when (audioType.lowercase()) {
"vlc" -> advancedPlayer.playVlc(fileName)
"mp4" -> advancedPlayer.playMp4(fileName)
else -> throw UnsupportedOperationException("Unsupported format: $audioType")
}
}
}
// Использование
val player: MediaPlayer = MediaAdapter(AdvancedMediaPlayer())
player.play("mp4", "movie.mp4") // Playing MP4: movie.mp4
Суть: Адаптер преобразует вызовы одного интерфейса в другой, сохраняя функциональность.