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

Объясните концепцию прокси и как она реализуется в программировании.

Компании, где спрашивали
AstonAston

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

sobes.tech AI

Прокси — это структурный паттерн проектирования, который предоставляет объект-заместитель для другого объекта, контролируя доступ к нему. В программировании прокси используется для добавления дополнительной логики при обращении к объекту, например, для ленивой инициализации, контроля доступа, кэширования или логирования.

В Java прокси можно реализовать несколькими способами:

  1. Реализация собственного класса-прокси, который содержит ссылку на реальный объект и переопределяет методы, добавляя нужную логику.

  2. Динамические прокси с помощью java.lang.reflect.Proxy, которые позволяют создавать прокси для интерфейсов во время выполнения, перехватывая вызовы методов через InvocationHandler.

Пример динамического прокси в Java:

import java.lang.reflect.*;

interface Service {
    void perform();
}

class RealService implements Service {
    public void perform() {
        System.out.println("Выполнение реальной операции");
    }
}

class ProxyHandler implements InvocationHandler {
    private final Object realObject;

    public ProxyHandler(Object realObject) {
        this.realObject = realObject;
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Перед вызовом метода");
        Object result = method.invoke(realObject, args);
        System.out.println("После вызова метода");
        return result;
    }
}

public class ProxyExample {
    public static void main(String[] args) {
        Service real = new RealService();
        Service proxy = (Service) Proxy.newProxyInstance(
            Service.class.getClassLoader(),
            new Class<?>[]{Service.class},
            new ProxyHandler(real));

        proxy.perform();
    }
}

В этом примере прокси добавляет вывод сообщений до и после вызова метода реального объекта.