В чем разница между Adapter и Facade

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

Ответ

Adapter преобразует интерфейс одного класса в другой, чтобы они могли работать вместе. Например, если у вас есть сторонний сервис с несовместимым API, адаптер обернет его и предоставит совместимый интерфейс.

interface Target { fun request(): String }
class Adaptee { fun specificRequest() = "Adaptee" }
class Adapter(private val adaptee: Adaptee) : Target {
    override fun request() = adaptee.specificRequest()
}

Facade упрощает сложную систему, предоставляя высокоуровневый интерфейс. Например, вместо ручного управления AudioPlayer, Equalizer и Playlist можно создать MusicPlayerFacade с методами play() и stop().

class AudioPlayer { fun playAudio() {} }
class Equalizer { fun adjust() {} }
class MusicPlayerFacade {
    private val player = AudioPlayer()
    private val equalizer = Equalizer()
    fun play() {
        player.playAudio()
        equalizer.adjust()
    }
}

Разница: Adapter решает проблему несовместимости интерфейсов, Facade — сложности взаимодействия с подсистемой.