Как стать автором
Обновить

Комментарии 8

Действительно, между декоратором и прокси получается не всегда четкая граница. Однако можно выделить следующие признаки присущие декоратору:
* Декоратор полностью повторяет интерфейс декорируемого объекта.
* Декоратор не обладает полнотой знаний о декорируемом объекте.
* При создании декоратора, ему всегда передается декорируемый объект (прокси всю работу выполняет сам).

Данный вопрос поднимался и в других местах.
Декоратор полностью повторяет интерфейс декорируемого объекта.
Я не очень понял, что есть интерфейс в таком вот контексте, поясните, пожалуйста.

Да и весь пример с интерфейсом MyDatabase не понятен, честно сказать, в отличие от декоратора HTTP-обработчика. Как именно происходит логирование в этом случае?
Структура MyExecutor ВКЛЮЧАЕТ в себя rich интерфейс MyDatabase, а следовательно, она реализует этот интерфейс. У нас же остается возможность переопределить часть (или все) методы этого интерфейса. Здесь мы перекрываем метод Exec, и заворачиваем в него вызов базового интерфейса. В результате, мы расширяем поведение прототипа, дополняя его профилированием/логгированием запроса.
Век живи. Не знал про такую композицию интерфейсов. Держите плюс.
Такая формулировка может запутать. А что если так: структура MyExecutor включает в себя анонимное поле, в котором может быть что-то, соответствующее интерфейсу MyDatabase.
Предположим, что нам нужно сделать все то же профилирование запросов к базе данных. В этом случае, нам необходимо:

Вместо прямого взаимодействия с базой данных через указатель, нам нужно перейти к взаимодействию через интерфейс (отделить поведение от реализации).
Создать обертку для каждого метода, выполняющего SQL запрос к базе данных.


Но разве это не является прокси, а не декоратором?
да и в первом случае скорее цепочка обязанностей
Википедия говорит следующее: в шаблоне «Цепочка обязанностей» сообщения в системе обрабатываются по схеме «обработай сам либо перешли другому», то есть одни сообщения обрабатываются на том уровне, где они получены, а другие пересылаются объектам иного уровня.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации