Ответ
Паттерн Proxy предоставляет суррогатный объект, контролирующий доступ к другому объекту. Основные сценарии использования:
- Ленивая инициализация (Virtual Proxy) – откладывает создание дорогостоящего объекта до момента его реального использования.
- Контроль доступа (Protection Proxy) – проверяет права доступа перед вызовом основного объекта.
- Логирование (Logging Proxy) – добавляет логирование вызовов методов.
- Кеширование (Cache Proxy) – сохраняет результаты запросов для повторного использования.
Пример Virtual Proxy:
interface Image {
void display();
}
class RealImage implements Image {
private String filename;
public RealImage(String filename) {
this.filename = filename;
loadFromDisk();
}
private void loadFromDisk() {
System.out.println("Loading " + filename);
}
public void display() {
System.out.println("Displaying " + filename);
}
}
class ProxyImage implements Image {
private RealImage realImage;
private String filename;
public ProxyImage(String filename) {
this.filename = filename;
}
public void display() {
if (realImage == null) {
realImage = new RealImage(filename);
}
realImage.display();
}
}