这篇主要介绍代理模式
相关内容,主要是一些基本概念普及。
代理模式(proxy)
,为其他对象提供一种代理以控制对这个对象的访问。[dp]
通俗的说就是指客户端并不直接调用实际的对象,而是通过代理对象,来间接调用实际的对象。
subject:
可以是接口,也可以是抽象类
proxy:
内部含有对真实对象realsubject的引用,负责对真实主题角色的调用,并在真实主题角色处理前后做预处理和后处理
proxied:
真实主题角色,业务逻辑的具体执行者
远程代理
,为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实[dp]。例如==rpc远程调用==。虚拟代理
,根据需要创建开销很大的对象。通过它来存放实例化需要很时间的真是对象[dp]。例如浏览器使用虚拟代理来代替真实的图片,代理中存储图片的大小和路径,待到下载优化的目的。安全代理
,用来控制真实对象访问时的权限[dp]。例如==权限控制==。智能指引
, 是指当调用真实的对象时,代理处理另外一些事情。代理类本身并不真正实现服务,而是同过调用委托类的相关方法,来提供特定的服务。真正的业务功能还是由委托类来实现,但是可以在业务功能执行的前后加入一些公共的服务。例如我们想给项目加入缓存、日志这些功能,我们就可以使用代理类来完成,而没必要打开已经封装好的委托类。典型应用例如==springaop、日志收集、过滤器==等等。
主要分静态代理
和动态代理
这样一来就会带来如下弊端:
静态代理中,目标类与其代理类是一一对应的。但是,会存在这样的情况:有n个类型不同的目标类,但是代理类中的“预处理、后处理”都是相同的,仅仅是调用目标类不同。若采用静态代理,那么必然需要手动创建n个代理类,很麻烦
动态代理
在运行期为各个目标类分别生成代理类,共享“预处理,后处理”功能,不需要事先知道目标对象的类型,这样可以大大减小程序规模。动态主要有两种,一种jdk动态代理,另外一种是cglib代理。这里限于篇幅,下篇学习笔记再总结。
参考资料:
如对本文有疑问, 点击进行留言回复!!
2021字节跳动秋招提前批——游戏客户端123+HR面经(已OC)
网友评论