2016-02-08 4 views
2

Зачем использовать «Динамический класс прокси» вместо шаблона «стандартный прокси»?Когда использовать шаблон «Динамический прокси-класс» или «стандартный прокси»?

Каковы недостатки или преимущества обоих?

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

Динамический прокси-класс https://docs.oracle.com/javase/8/docs/technotes/guides/reflection/proxy.html

динамический прокси-класс является классом, который реализует список интерфейсов , указанных во время выполнения таким образом, что вызов метода через один из интерфейсов на экземпляре класса будет быть закодирован и отправлен другому объекту через единый интерфейс. Таким образом, динамический прокси-класс может использоваться для создания защищенного типа прокси-объекта для списка интерфейсов , не требуя предварительного генерации прокси-класса, такого как , как и инструменты времени компиляции. Вызовы метода для экземпляра динамического прокси-класса отправляются в один метод в обработчик вызова экземпляра и кодируются с помощью объекта java.lang.reflect.Method , идентифицирующего метод, который был вызван , и массив type Объект, содержащий аргументы.

Стандартный шаблон прокси https://en.wikipedia.org/wiki/Proxy_pattern

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

ответ

1

Вы, кажется, ответили на свой вопрос. Вы должны использовать тот, который проще реализовать для вашего варианта использования.

Вам нужно динамическое прокси-сервер, если у вас нет реализации для каждого метода во время компиляции.

Например, в насмешливых тестовых библиотеках используются динамические прокси, чтобы писать код для обработки любого метода в общем случае.