设计模式之代理模式(Proxy Pattern)篇

设计模式之代理模式(Proxy Pattern)篇生活中的CASE:火车票代售点是代理,它拥有被代理对象的部分功能 —— 售票功能。为什么需要代理?在生活中,去售票代理处买票是因为火车站太远了,

欢迎大家来到IT世界,在知识的湖畔探索吧!

生活中的CASE

火车票代售点是代理,它拥有被代理对象的部分功能 —— 售票功能。

为什么需要代理?在生活中,去售票代理处买票是因为火车站太远了,但在代码的世界里可没有代码 “ 太远了 ” 这种说法。使用代理的基本目的是控制对真实对象的访问。

这里所说的 “ 控制 ” 并不是单纯地指权限控制、访问控制等,代理也可以为被代理的对象增加功能,例如使用 Spring AOP 给某方法执行前输出日志,Aop 也是一种代理。

从这一点上来说代理模式和装饰模式有些类似,但是两者之间本质上还是有些区别的。

扩展:装饰模式主要是给对象增强功能;代理模式是对访问对象加以控制。


编程思想

不要随意去修改别人已经写好的代码或者方法,如果需要修改,可以通过代理的方式来扩展该方法。即扩展性强,对象更智能。

定义

代理(Proxy)是一种设计模式,为一个目标对象提供一个替身,以控制对这个对象的访问方式。即通过代理对象访问目标对象。

被代理的对象(目标对象)可以是远程对象、创建开销大的对象或者需要安全控制的对象。

设计模式之代理模式(Proxy Pattern)篇

代理分类:

  • 静态代理
  • 动态代理

a)基于JDK的动态代理,针对有接口的类进行代理

b)基于CGLIB的动态代理,通过子类继承父类的方式进行代理

代理模式各类型实现形式也不同,如下:

    • 静态代理

1)目标对象必须实现接口

2)代理对象编译前手动生成

3)代理对象继承或聚合目标对象的方式实现

    • 动态代理(JDK代理、接口代理)

1)目标对象必须实现接口

2)动态创建代理对象

    • Cglib代理

1)在内存动态的创建对象

2)不需要实现接口,属于动态代理的范畴

关键点

代理对象与目标对象,代理对象是对目标对象的扩展,并会调用目标对象.

设计模式之代理模式(Proxy Pattern)篇

角色

  • ISubject

抽象主题角色,是一个接口。该接口是对象和它的代理共用的接口。

  • RealSubject

真实主题角色,是实现抽象主题接口的类。

  • Proxy

代理角色,内部可实现对真实对象的访问(聚合或者继承真实主题角色),从而可以操作真实对象。

代理对象提供与真实对象相同的接口,以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

优点

可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。

缺点

代理类由于做了很多额外的操作,可能使请求速度变慢

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/31641.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信