Может ли кто-нибудь сказать мне, как реализовать шаблон стратегии в АОП?Как реализовать шаблон стратегии в AOP
Пример использования Spring-AOP или AspectJ был бы очень полезен.
Может ли кто-нибудь сказать мне, как реализовать шаблон стратегии в АОП?Как реализовать шаблон стратегии в AOP
Пример использования Spring-AOP или AspectJ был бы очень полезен.
Самый простой способ, который я нашел, - это обеспечить, чтобы ваш класс реализовал пустой интерфейс.
Затем вы используете AspectJ для вставки реализации в интерфейс.
Таким образом, если вам нужно изменить алгоритм, вы можете просто использовать другой аспект, и проблема решена.
Для этого вы можете обратиться к руководству о том, как использовать межтипового: http://www.eclipse.org/aspectj/doc/released/progguide/starting-aspectj.html#inter-type-declarations
Update: Благодаря downvote я буду считать некоторые люди не поймут, о чем я говорю о, поэтому самый простой способ - пример. В этой статье есть несколько хороших примеров внедрения методов ввода в интерфейс. http://ramnivas.com/blog/index.php?p=20
Это не реализует шаблон стратегии, но базовая концепция одинаков, позволяет легко переключаться с одного алгоритма на другой, не меняя никакой другой части кода. Единственный другой способ, которым я могу это сделать, - использовать DI и просто ввести новый конкретный класс, каждый из которых имеет один и тот же интерфейс для Стратегии, но это выходит за рамки вопроса.
Update 2: Вот некоторые ссылки, чтобы показать, что можно сделать с помощью АОП: Избавление от плотности дизайн шаблона: http://www.ibm.com/developerworks/java/library/j-aopwork7/index.html Улучшение шаблонов проектирования с использованием AspectJ: http://www.ibm.com/developerworks/java/library/j-aopwork6/index.html AspectJ может быть использована для гораздо больше, чем просто некоторые основные сквозные проблемы. Большинство шаблонов дизайна GoF можно легко реализовать или удалить с помощью AspectJ.
Я думаю, что вы перепутали две вещи.
AOP - это реализация различных аспектов вокруг «реального» кода. Подобно протоколированию и проверке. Сам журнал можно реализовать, используя контейнер DI (например, предложенный весной), чтобы действительно делегировать ведение журнала правильной реализации (стратегии).
AOP также может использоваться для изменения поведения. Например, у меня есть AspectJ, чтобы превратить POJO в веб-службу или сервлет, в зависимости от аспектов. Например, я бы применил методы HttpServlet, если бы мне это было нужно. –
@James Black: Правда, однако я считаю, что использование AOP для изменения поведения не следует рассматривать как реализацию стратегии. Вы можете использовать AOP, чтобы превратить сущность в поддержку шаблона ActiveRecord, однако добавление стойкости к AOP - (возможно, хорошее) разделение беспокойства, однако используемые репозитории, использующие объекты AOP, могут/должны быть стратегией. – Rick
Почему downvote. Было бы хорошо, если бы кто-то знал, что мой ответ неверен, чтобы объяснить, почему. –