设计模式-代理模式(和装饰模式的真正区别)

最近有时间,学习了一下设计模式,发现了一个问题,代理模式(静态代理)在写法和结构上,基本和装饰器是一样的。由此引发了对这两者的真正区别的思考,网上搜索了许许多多的答案(虽然都有一定的道理,个人觉得都没有说到真正的重点) :  1 . 有的人说是结构上不同,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰器能够在运行时递归地被构造(我个人完全反对这种说法);  2 . 装饰器模...
摘要由CSDN通过智能技术生成

最近有时间,学习了一下设计模式,发现了一个问题,代理模式(静态代理)在写法和结构上,基本和装饰器是一样的。

由此引发了对这两者的真正区别的思考,网上搜索了许许多多的答案(虽然都有一定的道理,个人觉得都没有说到真正的重点) :

  1 . 有的人说是结构上不同,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰器能够在运行时递归地被构造(我个人完全反对这种说法);

  2 . 装饰器模式为了增强功能;而代理模式是为了加以控制,代理类对被代理的对象有控制权,决定其执行或者不执行。(大名鼎鼎的菜鸟教程这样解释);

  3 . 甚至还有人说装饰器模式用于添加新方法;而代理模式则用于增强原方法(那为什么叫代理?)。

理解的区别

代理模式(静态)与装饰者虽然在结构上基本上一模一样,但两者却有真正区别,我认为是 : 目的不一样,关注的重心不一样。

  代理模式目的 : 让原有对象被代理,我们的目的是让使用者尽可能的感受不到原有对象,原有对象的行为或额外的动作交由代理对象完成。(完成代理模式的真正意义)

  装饰器模式目的 : 让原有对象被增强,我们的目的通常是得到由原有对象被增强后的装饰器对象行为。(完成装饰器模式的真正意义)

  代理模式关注重心 : 主要功能不变,代理对象只是帮忙代理或稍加扩展原有对象的行为,功能上主要关心原有对象所具有的行为。(最终主要功能仍然由原有对象决定)

  装饰器模式关注重心 : 主要功能增强,使用装饰器目的就是为了增强,功能上更关心装饰增加后的行为。(最终主要功能由装饰对象决定)

直观的区别

在于装饰者模式新加的代码你知道你在用(流);而代理模式新加的代码你不知道你在用

静态代理(日志,权限)

静态代理的角色分为 : 抽象行为角色,委托人,代理人。基本写法如下 : 

  抽象行为角色 : 是委托人和代理人的共同接口。这里我们叫它抽象

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值