Sobes.tech
Назад к вопросам
Junior — Middle
95

Каким образом паттерн Proxy выступает в роли посредника для оригинального объекта?

Ответ от нейросети

sobes.tech AI

Паттерн Proxy в Java выступает в роли посредника между клиентом и оригинальным объектом. Proxy контролирует доступ к этому объекту, может добавлять дополнительную логику до или после вызова методов оригинала, например, кэширование, проверку прав доступа, ленивую инициализацию или логирование.

Таким образом, клиент взаимодействует с Proxy так же, как с оригинальным объектом, но 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();
    }
}

// Использование:
Image image = new ProxyImage("photo.jpg");
image.display(); // загрузка и отображение
image.display(); // только отображение, загрузка не повторяется

В этом примере Proxy контролирует создание и доступ к реальному объекту, оптимизируя работу с ресурсами.