У яких ситуаціях Proxy особливо корисний?
Proxy (Заступник) особливо корисний, коли потрібно контролювати доступ до ресурсомісткого, віддаленого або чутливого об'єкта, не змінюючи інтерфейс клієнта.
1. Лінива ініціалізація (Virtual Proxy)
Коли створення об'єкта дороге (наприклад, завантаження зображення, підключення до БД або читання великого файлу). Проксі створює реальний об'єкт тільки за першого звернення.
Приклад: відображення зображень у застосунку: поки картинка не показана, реальний об'єкт
Imageне створюється.
2. Віддалені виклики (Remote Proxy)
Коли об'єкт перебуває в іншому процесі або на іншому сервері. Проксі приховує мережеву логіку (серіалізацію, HTTP-виклики), щоб клієнт працював з віддаленим об'єктом як з локальним.
Приклад: Java RMI, gRPC, мікросервіси, API-клієнти.
3. Контроль доступу (Protection Proxy)
Коли потрібно обмежити операції залежно від ролей, прав або стану. Проксі перевіряє дозволи до того, як запит дійде до справжнього об'єкта.
Приклад: адміністратор може видалити запис, користувач - тільки переглянути.
4. Кешування (Caching Proxy)
Коли результат операцій можна повторно використовувати. Проксі зберігає відповіді реального об'єкта і повертає їх без повторних викликів.
Приклад: кешування запитів до зовнішнього API.
5. Логування і моніторинг (Logging Proxy)
Коли потрібно відстежувати дії об'єкта без зміни його коду. Проксі перехоплює виклики і додає логування, метрики, трасування.
6. Синхронізація і потокобезпека (Synchronized Proxy)
Коли до об'єкта звертаються з кількох потоків, проксі додає блокування і контроль доступу, не чіпаючи вихідний клас.
Висновок
Proxy особливо корисний, коли потрібно:
- відкласти створення важкого об'єкта,
- приховати віддалену взаємодію,
- додати безпеку, логування, кеш або синхронізацію, при цьому не змінюючи оригінальний код та інтерфейс.
Підсумок: Проксі робить взаємодію з об'єктами контрольованою, безпечною і прозорою, залишаючи в клієнта відчуття, що він працює зі "справжнім" об'єктом.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.