Ответ
Паттерн Facade (Фасад) упрощает работу со сложной системой, предоставляя простой интерфейс.
Пример из Android: работа с Camera API. Вместо ручного управления Camera, SurfaceView, ImageReader и обработки пермишенов, можно использовать CameraX — он скрывает сложность за простыми методами:
val cameraProviderFuture = ProcessCameraProvider.getInstance(context)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
val preview = Preview.Builder().build().also {
it.setSurfaceProvider(previewView.surfaceProvider)
}
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
cameraProvider.bindToLifecycle(this, cameraSelector, preview)
}, ContextCompat.getMainExecutor(context))
CameraX выступает фасадом, инкапсулируя настройки камеры, жизненный цикл и обработку поверхностей.
Ответ 18+ 🔞
Да ты посмотри, какая хитрая штука этот Фасад! Ну представь себе, тебе нужно с камерой на андроиде работать. А там, ёпта, просто пиздец какой-то: этот Camera открыть, к SurfaceView привязать, ImageReader настроить, про пермишены не забыть, жизненный цикл отслеживать — волнение ебать, терпения ноль ебать. Чувак, можно просто с ума сойти, пока всё это соберёшь в кучу.
И тут приходит наш спаситель — паттерн Фасад. По сути, это такой хитрая жопа, которая встаёт между тобой и всей этой ебучей системой. Она говорит: «Расслабься, мудила, забей. Не лезь в эти дебри, я сама всё сделаю». И даёт тебе одну простую ручку, за которую можно дёрнуть.
Вот смотри, как это в CameraX выглядит. Раньше бы тебе пришлось писать код, от которого мозг вытекает. А теперь? Тебе, по сути, нужно всего три вещи: получить провайдера, настроить превьюху и привязать это всё к жизненному циклу. Всё! Овердохуища сложности — и они спрятаны внутри.
val cameraProviderFuture = ProcessCameraProvider.getInstance(context)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
val preview = Preview.Builder().build().also {
it.setSurfaceProvider(previewView.surfaceProvider)
}
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
cameraProvider.bindToLifecycle(this, cameraSelector, preview)
}, ContextCompat.getMainExecutor(context))
Видишь? Никакого ручного управления сессиями, никакой возни с потоками. CameraX — это и есть тот самый фасад. Он как личный швейцар для камеры: ты приходишь, говоришь «хочу снимать с задней камеры и показывать вот в этом вьюхе», а он уже сам внутри настраивает все эти Camera, SurfaceView, жизненный цикл отслеживает, чтобы камера не торчала, когда приложение в фон ушло. Красота, а не работа!
Главная фишка в том, что если Google вдруг захочет поменять внутреннюю кухню работы с камерой (а они это любят, пидарасы шерстяные), то тебе, скорее всего, даже переписывать ничего не придётся. Потому что твой код работает с фасадом, а не с внутренностями. Фасад сам разберётся, как там теперь под капотом всё устроено. Удобно же, блядь! Сам от себя охуел, когда впервые понял, насколько это гениально просто.