AOP背后的基本设计模式是什么?

5
今天有人提出了一个有趣的问题,关于代理、包装器和装饰器的论点各不相同。
你有什么想法?

我认为这取决于你如何实现AOP,据我所知,你可以将其实现为构造函数注入器方法、接口注入器和设置器注入器。 - sheidaei
根据GoF,包装器是装饰器的另一个名称。 - Greg
2个回答

15

简述:

  • 代理模式:“为另一个对象提供替身或占位符以控制对它的访问”。
  • 装饰器模式:“动态地将责任附加到对象上”。
  • 适配器模式(包装器):“将类的接口转换为客户端期望的另一种接口”。

基于此,对我而言,AOP 更像是装饰器模式解决的问题,而不是代理模式,绝对不是适配器模式。

*来自 GoF 书籍。


这正是我所想的。AOP将会动态地将额外的责任附加到一个对象上。 - Nilesh
优美而清晰的总结。 AOP本质上是Decorator的实现。代理可以被引用,因为最著名的AOP实现依赖于使用代理作为基础的框架,比如Spring... 然而,你不需要这些框架或代理模式来实现AOP。 - Luca Tampellini

8
"这些参数从代理到包装器再到装饰器不一而足。"
没错。这就是为什么他们给它起了一个新名字——面向切面编程——而不仅仅是一个面向对象的设计模式。
如果能将其简化为单一的设计模式,它在思想市场上就不会持久存在。
重点是要采取更广泛的观点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接