Рубрики
Без рубрики

Шаблон прокси в Java

Руководство по шаблону проектирования прокси-сервера и его реализации на Java

Автор оригинала: baeldung.

1. Обзор

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

2. Пример шаблона Прокси-сервера

Рассмотрим тяжелый объект Java (например, соединение JDBC или SessionFactory ), который требует некоторой начальной настройки.

Мы хотим, чтобы такие объекты инициализировались только по требованию, и как только они будут инициализированы, мы захотим повторно использовать их для всех вызовов:

Давайте теперь создадим простой интерфейс и конфигурацию для этого объекта:

public interface ExpensiveObject {
    void process();
}

И реализация этого интерфейса с большой начальной конфигурацией:

public class ExpensiveObjectImpl implements ExpensiveObject {

    public ExpensiveObjectImpl() {
        heavyInitialConfiguration();
    }
    
    @Override
    public void process() {
        LOG.info("processing complete.");
    }
    
    private void heavyInitialConfiguration() {
        LOG.info("Loading initial configuration...");
    }
    
}

Теперь мы будем использовать шаблон прокси и инициализировать наш объект по требованию:

public class ExpensiveObjectProxy implements ExpensiveObject {
    private static ExpensiveObject object;

    @Override
    public void process() {
        if (object == null) {
            object = new ExpensiveObjectImpl();
        }
        object.process();
    }
}

Всякий раз, когда наш клиент вызывает метод process () , он просто увидит обработку, и начальная конфигурация всегда будет оставаться скрытой:

public static void main(String[] args) {
    ExpensiveObject object = new ExpensiveObjectProxy();
    object.process();
    object.process();
}

Обратите внимание, что мы вызываем метод process() дважды. За кулисами часть настроек будет выполняться только один раз – при первой инициализации объекта.

Для каждого последующего вызова этот шаблон будет пропускать начальную конфигурацию, и будет выполняться только обработка:

Loading initial configuration...
processing complete.
processing complete.

3. Когда использовать прокси-сервер

Важно понимать, как использовать шаблон.

Понимание того, когда использовать его, имеет решающее значение.

Давайте поговорим о том, когда использовать шаблон прокси:

  • Когда нам нужна упрощенная версия сложного или тяжелого объекта. В этом случае мы можем представить его с помощью скелетного объекта, который загружает исходный объект по требованию, также называемый ленивой инициализацией. Это называется виртуальным прокси-сервером
  • Когда исходный объект присутствует в другом адресном пространстве, и мы хотим представить его локально . Мы можем создать прокси-сервер, который выполняет все необходимые стандартные действия, такие как создание и поддержание соединения, кодирование, декодирование и т. Д., В то время как клиент обращается к нему так, как он присутствовал в их локальном адресном пространстве. Это называется удаленным прокси-сервером
  • Когда мы хотим добавить уровень безопасности к исходному базовому объекту, чтобы обеспечить контролируемый доступ на основе прав доступа клиента . Это называется прокси-сервером защиты

4. Заключение

В этой статье мы рассмотрели шаблон проектирования прокси-сервера. Это хороший выбор в следующих случаях:

  • Когда мы хотим иметь упрощенную версию объекта или получить к нему более безопасный доступ
  • Когда нам нужна локальная версия удаленного объекта

Полный исходный код для этого примера доступен на GitHub .