求教装饰模式和代理模式的区别

jclworkwoyo2 2010-04-19 10:43:16
这段时间学习设计模式,觉的这两个模式功能十分的类似,装饰模式是对原对象的功能增强,代理模式是原来对象的一个替身,可是代理模式中这个代理类也可以增强原有类的功能,这不就和装饰模式功能一样了吗,事物存在就有他的道理,所以问题是我认识不深刻,求教各位给予指点!~!~!~!~
...全文
852 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wrong1111 2012-02-24
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 chaoweiyi 的回复:]

1.装饰模式:对被装饰的对象增加额外的职责,满足里氏代换原则(子类可以代替父类)
如:杯子生产线,杯子必须可以装水,在生产线上可以给杯子涂颜色,加杯盖,但要保证杯子可以装水。

2.代理模式:对被代理的对象提供访问控制。
如:客户订购商品,可以直接从厂家订购,也可以从网上商城订购,网上商城是厂家的代理,从网上商城订购商品,商城可以对商品进行控制,不交钱不给商品,人不在不给商品,也可以赠送……
[/Quote]

这个比较容易理解。。。
chaoweiyi 2012-02-24
  • 打赏
  • 举报
回复
1.装饰模式:对被装饰的对象增加额外的职责,满足里氏代换原则(子类可以代替父类)
如:杯子生产线,杯子必须可以装水,在生产线上可以给杯子涂颜色,加杯盖,但要保证杯子可以装水。

2.代理模式:对被代理的对象提供访问控制。
如:客户订购商品,可以直接从厂家订购,也可以从网上商城订购,网上商城是厂家的代理,从网上商城订购商品,商城可以对商品进行控制,不交钱不给商品,人不在不给商品,也可以赠送你额外的礼品,代金券。
nj_dobetter 2012-02-24
  • 打赏
  • 举报
回复
很多模式,虽然语义上有一些区别,在实现上基本差不多,无非覆盖、抽象接口、继承扩展这几个方法。
jiakai0419 2012-01-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bao110908 的回复:]

用途不一样吧

装饰模式是指增强被包装对象的功能
代理模式是修改被代理对象的行为
[/Quote]


+1
denghaiweidhw 2012-01-16
  • 打赏
  • 举报
回复
只能语义上区别,
装饰模式,像化妆:无论你怎么画,你都得把妆画到脸(或其他对象)上,你可以画眉毛,也可以修眉毛,但连脸都没有,你就不能说你在化妆了,也就是说不能说是用装饰模式。
代理模式,像买票:你买火车票可以去代理那买,但都知道国内什么不良商贩都有,如果碰到假代理,根本就是卖假票,也就是说没有真票,但他照样是在代理只不过,因为你不知道它是真是假,具体的代理操作你不知道,完全透明,不像装饰,还得提供个脸进去。
换句话说,装饰就是对一个被装饰对象做有限的事,而且必须是真的做了,不然等于没用,代理就是对被代理的对象做任何事,包括什么都不做,甚至把代理的对象都给灭了。两者程度和范围不同。
china1314920 2011-08-20
  • 打赏
  • 举报
回复
学习学习
daijope 2011-08-20
  • 打赏
  • 举报
回复
确实有一点疑惑,
龙四 2011-05-30
  • 打赏
  • 举报
回复
很多设计模式UML图上看起来都差不多,但是最主要的区别在于他们的意图
wp500 2011-05-30
  • 打赏
  • 举报
回复
效果差不多。 不过出发点不一样。

装饰模式:将原有的事物增加新的功能。我觉得对于使用者来说他看到的是装饰后的效果。而使用者并不关系原来的样子。

代理模式:用户通过代理来访问目标的功能,使用者关心的是原始功能都有什么功能。

举个例子 A类是原始功能的类, B是装饰模式中对A类的扩展之后的类, C是代理模式中对A类的扩展

对于用户调用来说。
使用装饰模式, 用户更关系的是B的功能(包含A的原始功能)。
使用代理模式,用户更关心A的功能。并不关系(c的功能)。

以上是本人的理解

zfq642773391 2010-04-19
  • 打赏
  • 举报
回复
装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案;
代理模式给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用;
装饰模式应该为所装饰的对象增强功能;
代理模式对代理的对象施加控制,并不提供对象本身的增强功能
Mars_Ma_OK 2010-04-19
  • 打赏
  • 举报
回复
支持顶顶吧..
  • 打赏
  • 举报
回复
用途不一样吧

装饰模式是指增强被包装对象的功能
代理模式是修改被代理对象的行为
jclworkwoyo2 2010-04-19
  • 打赏
  • 举报
回复
谢谢楼上的指点!~!~!~
weberwong 2010-04-19
  • 打赏
  • 举报
回复
最常见的代理就是权限判断了,权限就肯定是限制了,其余例子我一时也不好举,实际项目中代理用的并不多
别考虑咱们上网时候用的那个代理,那个真不是这个意思
jclworkwoyo2 2010-04-19
  • 打赏
  • 举报
回复
模式的一个重要作用是简化其他程序员对你程序的理解 谢谢!~ 这点倒是没想到的。 还有代理类不仅有原有类的限制功能吧 !~!~
weberwong 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jclworkwoyo2 的回复:]

现在有点感觉是 他们的实现机制是一样的 不一样的是他们所做的事情的功能目的差别 (这样一想这两个模式有一个多余的了,只要存在一个让他在不同地方做不同的事就好了???????????)
[/Quote]

实现机制确实是一样的,你可以看到他们的实例代码重复是很多的
但就语义上说,这两者的功能是相反的,模式的一个重要作用是简化其他程序员对你程序的理解,你在一个地方写装饰,大家就知道这是在增加功能,你写代理,大家就知道是在限制,虽然代码很可能相同,但如果你都叫他们装饰,别人会很迷惑的
jclworkwoyo2 2010-04-19
  • 打赏
  • 举报
回复
现在有点感觉是 他们的实现机制是一样的 不一样的是他们所做的事情的功能目的差别 (这样一想这两个模式有一个多余的了,只要存在一个让他在不同地方做不同的事就好了???????????)
weberwong 2010-04-19
  • 打赏
  • 举报
回复
作限制当作增加功能。。这个也可以这么想吧,不过通常不是
增加功能和限制功能当然是相反了,这个不用涉及到技术领域也是一样的吧

另外你说的增加事务管理确实是装饰
而代理一般是:用原有类你可以访问某对象,加了代理后可能就要判断一下你的权限,如果没权限就不让你访问这类事
jclworkwoyo2 2010-04-19
  • 打赏
  • 举报
回复
这个限制可不可以也理解为增加功能呢 比如Spring中代理事务管理,理解为对被代理类增加事务管理功能 和理解为被代理类限制它的操作要有事务管理是一样呢,语义相反是什么概念呢 我不理解!~!~!~
weberwong 2010-04-19
  • 打赏
  • 举报
回复
装饰是在原有类上增加功能用的
代理是对原有类作限制用的
机制差不多,但语义上方向相反
加载更多回复(2)

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧