Является ли АОП типом шаблона декоратора?

Мне задали этот вопрос в интервью. Я четко знаю, что такое паттерн-декоратор и как его можно использовать. Но в интервью мне не удалось обдумать этот вопрос.

Это и есть актуальный вопрос.

Является ли АОП разновидностью шаблона декоратора? Чем реализация АОП отличается от шаблона декоратора товарного знака?

27
задан Yahia 13 November 2011 в 14:11
поделиться

3 ответа

Я бы сказал, AOP (Аспектно-ориентированное программирование) НЕ является шаблоном сам по себе (и, следовательно, не является типом шаблона декоратора из моего POV) ... его реализация может быть выполнена с помощью одного или нескольких шаблонов. (включая использование шаблона декоратора ) ... AOP - это парадигма программирования ИМХО - другие парадигмы, например, ООП, функциональное программирование или процедурное программирование ...

24
ответ дан 28 November 2019 в 05:22
поделиться

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

11
ответ дан 28 November 2019 в 05:22
поделиться

Я бы сказал, да, AOP - это реализация шаблона декоратора.

Для меня самые большие различия были бы в том, как это реализовано, и как это применяется.

Традиционные декораторы, как правило, представляют собой объекты, которые либо создают явно декорируемый объект, либо включаются точкой расширения базового объекта.

AOP обычно указывается более «декларативным» образом - традиционные декораторы являются общей частью основного кода.

Традиционные декораторы обычно применимы только к конкретным классам или интерфейсам и обычно применяются на уровне экземпляров. АОП (в целом) может обернуть функциональность вокруг по существу произвольного кода на «уровне земли» - поведение будет распространяться на все экземпляры любого аспекта, к которому применяется аспект. Это то, что позволяет ему удовлетворить свое требование «сквозной функциональности»: оно не обязательно ограничено такой же узкой областью, как декораторы.

Это зависит от основного языка, однако - некоторые из них более гибкие, чем другие. Вышеприведенное относится в большей степени к «статическим» языкам (например, Java), а не к языку, подобному Ruby, где то, что выглядит как традиционный декоратор, может быть применено к одному экземпляру или стать частью определения класса.

6
ответ дан 28 November 2019 в 05:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: