Ответ
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 — сложности взаимодействия с подсистемой.