Что такое паттерн Адаптер (Adapter)

«Что такое паттерн Адаптер (Adapter)» — вопрос из категории Паттерны, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Паттерн Адаптер позволяет объектам с несовместимыми интерфейсами работать вместе. Он оборачивает один интерфейс в другой, преобразуя вызовы.

Пример:

// Интерфейс, который ожидает клиент
interface MediaPlayer {
    fun play(fileType: String, fileName: String)
}

// Несовместимый интерфейс
class AdvancedMediaPlayer {
    fun playVlc(fileName: String) { /* ... */ }
    fun playMp4(fileName: String) { /* ... */ }
}

// Адаптер
class MediaAdapter(private val advancedPlayer: AdvancedMediaPlayer) : MediaPlayer {
    override fun play(fileType: String, fileName: String) {
        when (fileType) {
            "vlc" -> advancedPlayer.playVlc(fileName)
            "mp4" -> advancedPlayer.playMp4(fileName)
        }
    }
}

Когда использовать:

  • Когда нужно использовать существующий класс, но его интерфейс не соответствует требованиям
  • Для работы с legacy-кодом
  • Для интеграции сторонних библиотек