论坛首页 Java企业应用论坛

设计模式--代理模式

浏览 37311 次
精华帖 (12) :: 良好帖 (7) :: 新手帖 (0) :: 隐藏帖 (6)
作者 正文
   发表时间:2010-05-12  
aop代理,讲得很好。学习了
0 请登录后投票
   发表时间:2010-05-12  
以前也看过代理模式,但是好久好久没用到了。现在温习下。
0 请登录后投票
   发表时间:2010-06-22  
同意LZ的看法。
0 请登录后投票
   发表时间:2010-08-02  
LZ的动态代理有点spring事务AOP的感觉 呵呵
0 请登录后投票
   发表时间:2010-08-11  
liwenjie 写道
代理模式通常是对原有对象的控制,不会增加新的行为,比如说原来干什么还是干什么,常见的比如cglib加上事务机制,但是没有增加新的行为,原有的服务未变。
但是装饰模式通常会加上新的行为,而且行为可以动态进行组合,可以有任意顺序,比如给墙刷颜色,先刷底色,再刷红色,再刷绿色,也可以先刷底色,再刷绿色,再刷红色。

代理模式和装饰模式都可以构造成在新类中引用对原有类,构成原有类的委托,这样就可以对原有类进行控制了,可以加新的行为,也可以加上其他控制。

不过有一点疑问,代理者和被代理者是聚合关系吗??聚合关系是整体和局部的关系,但是离开整体局部还可以生存,比如飞机场和飞机,代理模式两者关系,我觉得应该是依赖关系,更像是user-a关系,正因为是依赖关系,所以我们使用接口进行了解耦,而不是显示依赖直接注入实现类

引用
/** 
*真实主题角色,这里指红酒工厂角色,它实现了SellInterface接口 
*/ 
public class RedWineFactory implements SellInterface{  
     public Object sell(){  
         System.out.println("真实主题角色RedWineFactory 被调用了");  
         return new Object();  
     }  



另外,factory通常都是create方法创建一个类,这里是sell方法看似不太准确,应该是factory生成一个实现SellInterface的实现类,或者干脆搞一个抽象工厂,把实现细节交给工厂子类,工厂类实现一个create***接口



cglib用asm直接动态生成bytecode,都不需要被代理的类RedWineFactory实现SellInterface接口,真是威武无比!他会在运行时在内存中动态生成一个RedWineFactory$$EnhangcerByCGLIB$$xxxxx的类,具有与RedWineFactory相同的方法。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics