A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梦想蓝色天空 高级黑马   /  2013-7-24 17:49  /  5174 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 梦想蓝色天空 于 2013-7-25 09:59 编辑

我一直认为都是对方法的增强,但是不知道二者有什么区别,什么时候用代理,什么时候用装饰模式,请大家解惑,谢谢

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

6 个回复

倒序浏览
装饰器模式:能动态的新增或组合对象的行为。
代理模式:为其他对象提供一种代理以控制对这个对象的访问.
装饰模式是“新增行为”,而代理模式是“控制访问”。

装饰模式是在原有基础之上增加额外的功能,而代理模式有两种情况可以使用第一种是延迟代理对象,对于大文件或者目前还未加载完的对象,使用比较合适。第二种为权限判断,在调用功能前判断当前用户是否有此权限。

代理模式不是嵌套调用的。

装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案;
代理模式给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用;
装饰模式应该为所装饰的对象增强功能;
代理模式对代理的对象施加控制,并不提供对象本身的增强功能

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模 式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。
我们可以用另外一句话来总结这些差别:使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造。        
回复 使用道具 举报
代理模式的作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。静态代理模式中,真实角色必须是事先已经存在的,并将其作为代理对象的内部属性。但实际使用时,一个真实角色必须对应一个代理角色,如果大量使用,就会导致类的急剧膨胀,这就用到动态代理了。动态代理模式下,被代理的对象(真实角色)可以在运行时动态改变,需要控制的接口(代理与真实对象共有的接口)也可以在运行时改变。其实动态代理就是客户通过代理类来调用其他对象的方法。装饰模式是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。它主要是用来在不创造更多子类的情况下将对象的功能加以扩展。我们可以形象地理解成,动态代理是中介,起着连接客户与商家的作用。装饰对象的类是一个对象的类的子类,不仅拥有父类的功能,还有自己特有的功能。
回复 使用道具 举报
装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,常常在一个代理类中创建一个对象的实例。并且,当使用装饰器模 式的时候,通常的做法是将原始对象作为一个参数传给装饰者的构造器。
回复 使用道具 举报
装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案;
代理模式给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用;
装饰模式应该为所装饰的对象增强功能;
代理模式对代理的对象施加控制,并不提供对象本身的增强功能
回复 使用道具 举报
明白了。。谢谢大家
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马