Паттерн «Заместитель» (Proxy) относится к структурным паттернам проектирования и используется для контроля доступа к объекту или управления его созданием. Заместитель представляет собой объект-оболочку, который контролирует доступ к другому объекту, называемому реальным субъектом. Основная идея паттерна «Заместитель» заключается в создании прокси-объекта, который выступает в роли заместителя для реального объекта. Прокси обеспечивает тот же интерфейс, что и реальный объект, и делегирует ему вызовы, при этом может выполнять дополнительные операции до или после вызова реального объекта. Пример реализации паттерна «Заместитель» на языке Java: // Интерфейс, предоставляющий функциональность public interface Subject { void request(); } // Реальный объект, к которому осуществляется доступ через заместитель public class RealSubject implements Subject { @Override public void request() { System.out.println("Выполнение запроса"); } } // Заместитель public class Proxy implements Subject { private RealSubject realSubject; @Override public void request() { if (realSubject == null) { realSubject = new RealSubject(); } preRequest(); realSubject.request(); postRequest(); } private void preRequest() { System.out.println("Подготовка к выполнению запроса"); } private void postRequest() { System.out.println("Завершение выполнения запроса"); } } В данном примере у нас есть интерфейс Subject, который предоставляет функциональность. Класс RealSubject является реальным объектом, к которому осуществляется доступ через заместитель. Класс Proxy выступает в роли заместителя для объекта RealSubject. Он реализует интерфейс Subject и делегирует вызовы метода request() объекту RealSubject. При этом прокси может выполнять дополнительные операции до и после вызова реального объекта. Теперь мы можем использовать заместитель для контроля доступа к реальному объекту. Например: Subject subject = new Proxy(); subject.request(); Паттерн «Заместитель» позволяет контролировать доступ к объекту, выполнять дополнительные операции до или после вызова реального объекта, а также управлять его созданием. Это обеспечивает гибкость и расширяемость системы.