Объясните концепцию прокси и как она реализуется в программировании.
Ответ от нейросети
sobes.tech AI
Прокси — это структурный паттерн проектирования, который предоставляет объект-заместитель для другого объекта, контролируя доступ к нему. В программировании прокси используется для добавления дополнительной логики при обращении к объекту, например, для ленивой инициализации, контроля доступа, кэширования или логирования.
В Java прокси можно реализовать несколькими способами:
-
Реализация собственного класса-прокси, который содержит ссылку на реальный объект и переопределяет методы, добавляя нужную логику.
-
Динамические прокси с помощью
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();
}
}
В этом примере прокси добавляет вывод сообщений до и после вызова метода реального объекта.