有谁能告诉我如何在AOP中实施战略模式?
使用Spring-AOP或AspectJ的示例非常有用。
答案 0 :(得分:5)
我找到的最简单方法是让你的类实现一个空白界面。
然后使用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可以用于更多,而不仅仅是一些基本的跨领域问题。使用AspectJ可以轻松实现或退出大多数GoF设计模式。
答案 1 :(得分:0)
我认为你混淆了两件事。
AOP是围绕“真实”代码实现不同方面。像记录和验证。日志记录本身可以通过使用DI容器(如spring提供)来实现,以便将日志记录委托给正确的实现(策略)。