社区
Java SE
帖子详情
求教装饰模式和代理模式的区别
jclworkwoyo2
2010-04-19 10:43:16
这段时间学习设计模式,觉的这两个模式功能十分的类似,装饰模式是对原对象的功能增强,代理模式是原来对象的一个替身,可是代理模式中这个代理类也可以增强原有类的功能,这不就和装饰模式功能一样了吗,事物存在就有他的道理,所以问题是我认识不深刻,求教各位给予指点!~!~!~!~
...全文
813
23
打赏
收藏
求教装饰模式和代理模式的区别
这段时间学习设计模式,觉的这两个模式功能十分的类似,装饰模式是对原对象的功能增强,代理模式是原来对象的一个替身,可是代理模式中这个代理类也可以增强原有类的功能,这不就和装饰模式功能一样了吗,事物存在就有他的道理,所以问题是我认识不深刻,求教各位给予指点!~!~!~!~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
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
打赏
举报
回复
支持顶顶吧..
火龙果被占用了
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)
相关推荐
<5>设计模式(基于C/C++实现)
当你有了一定的语言基础以后,对于软件的开发就要上升到设计阶段。设计模式就是这样一门软件设计的课目。本课程,从设计查模式的原则开始讲起,然后讲解了软件设计中常用的单例模式,观察者模式,策略模式,
代理模式
,
装饰模式
,适配器模式,桥接模式,工厂模式及重要的软件设计模型MVC编程思想。为了讲解设计模式,辅之讲解了UML设计的点点面面。
装饰模式
、
代理模式
1、
装饰模式
(Decorator): 2、
代理模式
(Proxy): 3、
装饰模式
和
代理模式
的
区别
: 4、
装饰模式
和策略模式的
区别
:
装饰模式
与
代理模式
的
区别
以下是我的理解: 代码
区别
:
装饰模式
跟
代理模式
代码的最大的在于他们的构造方法,
代理模式
的构造方法不传参数,在构造方法内部完成参数传递,
装饰模式
将装饰的对象作为参数传进去。 理念
区别
:
代理模式
中,代理类对被代理的对象有控制权,决定其执行或者不执行。而
装饰模式
中,装饰类对代理对象没有控制权,只能为其增加一层装饰,以加强被装饰对象的功能,仅此而已 转载内
第2章 架构师内功心法之设计模式
不用设计模式并非不可以,但是用好设计模式能帮助我们更好地解决实际问题,设计模式最重要的是解耦。设计模式天天都在用,但自己却无感知。我们把设计模式作为一个专题,主要是学习设计模式是如何总结经验的,把经验为自己所用。学设计模式也是锻炼将业务需求转换技术实现的一种非常有效的方式。本章内容将按照创建型模式(工厂方法模式、抽象工厂模式、单例模式、原型模式、建造者模式)、结构型模式(
代理模式
、门面模式、装饰器模式、享元模式、组合模式、适配器模式、桥接模式)、行为型模式(模板方法模式、策略模式、责任链模式、迭代器模式、命令模式、状态模式、备忘录模式、中介者模式、解释器模式、观察者模式、访问者模式)的顺序讲解。
Java SE
62,567
社区成员
307,521
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告