Как реализовать шаблон стратегии в АОП - PullRequest
2 голосов
/ 22 октября 2009

Может кто-нибудь сказать мне, как реализовать шаблон стратегии в АОП?

Пример использования Spring-AOP или AspectJ был бы очень полезен.

Ответы [ 2 ]

5 голосов
/ 22 октября 2009

Самый простой способ, который я нашел, - заставить ваш класс реализовать пустой интерфейс.

Затем вы используете AspectJ для вставки реализации в интерфейс.

Таким образом, если вам нужно изменить алгоритм, вы можете просто использовать другой аспект, и проблема решена.

Для этого вы можете посмотреть руководство по использованию inter-type: http://www.eclipse.org/aspectj/doc/released/progguide/starting-aspectj.html#inter-type-declarations

Обновление: Из-за понижающего голоса я собираюсь предположить, что некоторые люди не поймут, о чем я говорю, поэтому самый простой способ - это пример. В этой статье есть несколько хороших примеров внедрения методов в интерфейс. http://ramnivas.com/blog/index.php?p=20

Это не реализация паттерна Стратегия, но основная концепция та же, что позволяет легко переключаться с одного алгоритма на другой, не изменяя какую-либо другую часть кода. Единственный другой способ сделать это - использовать DI и просто внедрить новый конкретный класс, каждый из которых имеет один и тот же интерфейс для Стратегии, но об этом не может быть и речи.

Обновление 2: Вот несколько ссылок, показывающих, что можно сделать с помощью AOP: Избавление от расчетной плотности шаблона: 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.

0 голосов
/ 22 октября 2009

Я думаю, вы перепутали две вещи.

AOP - это реализация различных аспектов «реального» кода. Нравится регистрация и проверка. Само ведение журнала может быть реализовано с помощью контейнера DI (как предлагается Spring), чтобы действительно делегировать ведение журнала правильной реализации (стратегии).

...