理解设计模式(十三)——代理模式
代理模式
- 理解设计模式(一)——简单工厂
- 理解设计模式(二)——工厂方法
- 理解设计模式(四)——建造者
- 理解设计模式(五)——原型模式
- 理解设计模式(六)——单例模式
- 理解设计模式(七)——适配器模式
- 理解设计模式(八)——桥接模式
- 理解设计模式(九)——组合模式
- 理解设计模式(十)——装饰模式
- 理解设计模式(十一)——门面模式
- 理解设计模式(十二)——享元模式
提出问题
如果大家知道怎么科学上网的话,应该就对代理有一定的了解。所谓的代理就是,一件事情,我不亲自去做,因为我亲自做做不了,而是找一个人帮我做,这个人就是我的代理。
比如说A和C关系不好,A要跟C说一些事情,碍于情面不方便直接说。这时候,A可以委托B作为他的代理,让B去和C说,再把结果告诉A。这就是(正向)代理。
有正向代理就有反向代理。感兴趣可以自行了解。
那么,在写代码的过程中,我们为什么需要代理?要调用一个对象直接调用就行了,非得要再通过另一个对象再去调用干嘛?
其实在项目中,代理模式就像是一个中间层(中间件),在真正处理请求之前,要先做一些预处理。这些预处理可以放在代理对象中进行。
比如请求数据库之前,要先判断当前用户是否有访问数据库的权限。判断权限的部分就可以交给代理对象处理。
解决问题
有了这么一个思想后,写代码其实是很简单直观的。
class RealObject { |
后记
除了解决上面说的权限验证的问题外,代理还有其他的一些用途:
虚拟代理:真实对象响应时间较长,创建一个虚拟代理先响应,等到真实对象响应了再发送真实的响应。
缓存代理:将请求缓存下来,之后如果再有请求,就不需要向真实对象请求了,直接从缓存代理中返回结果。不过要注意缓存过期的问题。