社区
Java SE
帖子详情
求教装饰模式和代理模式的区别
jclworkwoyo2
2010-04-19 10:43:16
这段时间学习设计模式,觉的这两个模式功能十分的类似,装饰模式是对原对象的功能增强,代理模式是原来对象的一个替身,可是代理模式中这个代理类也可以增强原有类的功能,这不就和装饰模式功能一样了吗,事物存在就有他的道理,所以问题是我认识不深刻,求教各位给予指点!~!~!~!~
...全文
853
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
打赏
举报
回复
支持顶顶吧..
火龙果被占用了
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)
数据处理救星降世Power Query
0/ Excel数据处理新利器来了,准备好了吗?1/ 比网红函数VLOOKUP还全面的功能。——查(查询)2/ 取其精华,去其糟粕。——筛(筛选)3/ 拆分就像同学会,拆散一对是一对。——拆(拆分)4/ 天下大势,合久必分,分久必合。——合(合并)5/ 隔空取物,犹如探囊取物——提(提取)6/ 百转千回后的峰回路转。——转(转换)7/ 它判断真假的唯一标准。——判(判断)8/ 人以群分,物以类聚。——聚(聚合)9/ 我自己的难题自己造函数,不
求教
别人。——技法(自定义函数)
安卓面试题选择题,2024金九银十面试讴歌系列,带你彻底搞懂Android启动速度优化
切勿进行不当的反问。在一个不恰当的时机进行一个不恰当的反问,势必会导致很多麻烦。我们在面试过程中,一定不要和面试官进行争论或者反问面试官(虚心
求教
还是可以的)。如果面试官的水平或者度量还好的话可能没什么关系,但是也不能排除哪些个水平一般或者度量较小的面试官,你和他争论是没有任何好处的。你来这儿面试是为了找工作的,不是去争个对与错的,得罪了面试官没有任何好处。切勿套近乎。面试过程中,一定要注意保持与面试官的距离,不要上来就套近乎,整得好像你跟面试官很熟似的。
从投递到拿到offer,这份Android面试秘籍一文全解
简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。面试过程一定要有礼貌!
从投递到拿到offer,这份Android面试秘籍一文全解,2021年阿里+头条+腾讯大厂Android笔试真题
切勿答非所问,偷换概念。当面试官提出一个你并不是很了解的问题时候,即使冷场也不要答非所问,进行偷换概念。因为面试最讲究的就是真诚二字。你这样做只会加深面试官对你的厌恶。 切勿侃侃而谈。有很多人在面试时,为了能够在面试官面前一展"风采",常常是夸夸其谈,口若悬河,殊不知这其实是犯了大忌的。因为在面试官眼里,你这样啪啦啪啦没完没了地讲下去,面试官可能会有如下四种理解: 没有快速答到要点,认为你并没有get到这个问题的本质,对这块掌握得不够。 卖弄自己的知识,日后和这种人合作起来会不会很费力? ..
穿上这件Android面试防弹衣,从此便可以将HR玩弄于股掌之间
那么我们应该怎么做呢,这里我仅仅是简单列举一些供大家参考:吐字清晰、大方得体、语速适中。说话的语气要平和,不可忽高忽低,也不能过于情绪化。认真聆听面试官的发言,注意面试官一些细微的表情变化以及手势动作。必要时可以使用一些机智、幽默的话术。当语言并不能完全表达意思的时候,可以加上手势或者书面的形式加以描述。
Java SE
62,624
社区成员
307,283
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章