Ответ
Плюсы:
- Упрощает работу с сложными системами, предоставляя простой интерфейс
- Снижает зависимость клиентского кода от внутренней реализации
- Улучшает читаемость и поддерживаемость кода
Минусы:
- Может стать "божественным объектом", если берет на себя слишком много
- Ограничивает гибкость, если нужен доступ к низкоуровневым компонентам
Пример:
class AudioPlayerFacade {
private val decoder = AudioDecoder()
private val equalizer = Equalizer()
fun playSong(file: File) {
val rawAudio = decoder.decode(file)
equalizer.adjustSound(rawAudio)
// Воспроизведение...
}
}
// Клиентский код
val player = AudioPlayerFacade()
player.playSong(File("song.mp3"))