【问题标题】:How to implement the Strategy Pattern in AOP如何在 AOP 中实现策略模式
【发布时间】:2009-10-22 03:31:39
【问题描述】:

谁能告诉我如何在 AOP 中实现策略模式?

使用 Spring-AOP 或 AspectJ 的示例会很有帮助。

【问题讨论】:

    标签: spring design-patterns aop aspectj strategy-pattern


    【解决方案1】:

    我发现最简单的方法是让你的类实现一个空白接口。

    然后你使用 AspectJ 将实现插入到接口中。

    这样,如果您需要更改算法,您只需使用不同的方面即可解决问题。

    为此,您可以查看how to use inter-type 上的手册。


    This article 有一些将方法注入接口的好例子。

    这不是实现策略模式,但基本概念是相同的,可以轻松地从一种算法切换到另一种算法,而无需更改代码的任何其他部分。我能看到的唯一另一种方法是使用 DI 并注入一个新的具体类,每个类都有相同的策略接口,但这不在问题范围内。

    这里有一些链接展示了 AOP 可以做什么:

    AspectJ 不仅仅可以用于一些基本的横切关注点。大多数 GoF 设计模式都可以通过使用 AspectJ 轻松实现或停用。

    【讨论】:

      【解决方案2】:

      我认为你把两件事搞混了。

      AOP 是围绕“真实”代码实现不同方面。就像日志记录和验证一样。日志记录本身可以通过使用 DI 容器(如 spring 提供)来实现,以将日志记录真正委托给正确的实现(策略)。

      【讨论】:

      • AOP 也可以用来改变行为。例如,我使用 AspectJ 将 POJO 转换为 Web 服务或 servlet,具体取决于方面。例如,如果需要,我会注入 HttpServlet 的方法。
      • @James Black:是的,但是我发现使用 AOP 来改变行为不应被视为实施策略。您可以使用 AOP 将实体转变为支持 ActiveRecord 模式,但是使用 AOP 添加持久性是(也许很好)关注点分离,但是使用 AOP 对象的使用存储库可能/应该是一种策略。
      猜你喜欢
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2011-11-23
      相关资源
      最近更新 更多