欢迎大家来到IT世界,在知识的湖畔探索吧!
生活中的CASE:
火车票代售点是代理,它拥有被代理对象的部分功能 —— 售票功能。
为什么需要代理?在生活中,去售票代理处买票是因为火车站太远了,但在代码的世界里可没有代码 “ 太远了 ” 这种说法。使用代理的基本目的是控制对真实对象的访问。
这里所说的 “ 控制 ” 并不是单纯地指权限控制、访问控制等,代理也可以为被代理的对象增加功能,例如使用 Spring AOP 给某方法执行前输出日志,Aop 也是一种代理。
从这一点上来说代理模式和装饰模式有些类似,但是两者之间本质上还是有些区别的。
扩展:装饰模式主要是给对象增强功能;代理模式是对访问对象加以控制。
编程思想
不要随意去修改别人已经写好的代码或者方法,如果需要修改,可以通过代理的方式来扩展该方法。即扩展性强,对象更智能。
定义
代理(Proxy)是一种设计模式,为一个目标对象提供一个替身,以控制对这个对象的访问方式。即通过代理对象访问目标对象。
被代理的对象(目标对象)可以是远程对象、创建开销大的对象或者需要安全控制的对象。
代理分类:
- 静态代理
- 动态代理
a)基于JDK的动态代理,针对有接口的类进行代理
b)基于CGLIB的动态代理,通过子类继承父类的方式进行代理
代理模式各类型实现形式也不同,如下:
- 静态代理
1)目标对象必须实现接口
2)代理对象编译前手动生成
3)代理对象继承或聚合目标对象的方式实现
- 动态代理(JDK代理、接口代理)
1)目标对象必须实现接口
2)动态创建代理对象
- Cglib代理
1)在内存动态的创建对象
2)不需要实现接口,属于动态代理的范畴
关键点
代理对象与目标对象,代理对象是对目标对象的扩展,并会调用目标对象.
角色
- ISubject
抽象主题角色,是一个接口。该接口是对象和它的代理共用的接口。
- RealSubject
真实主题角色,是实现抽象主题接口的类。
- Proxy
代理角色,内部可实现对真实对象的访问(聚合或者继承真实主题角色),从而可以操作真实对象。
代理对象提供与真实对象相同的接口,以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
优点
可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。
缺点
代理类由于做了很多额外的操作,可能使请求速度变慢
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/31641.html