设计模式之代理模式
2021 algorithm代理模式(Proxy Design Pattern),它在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。
一般情况下,我们让代理类和原始类实现同样的接口。但是,如果原始类并没有定义接口,并且原始类代码并不是我们开发维护的。在这种情况下,我们可以通过让代理类继承原始类的方法来实现代理模式。
使用代理模式创建代表对象,让代表对象控制某些对象的访问,被代理的对象可以是远程的对象,创建开销大的对象或需要安全控制的对象。
UML
- Proxy 和 RealSubject 都实现了 Subject 接口,这允许任何客户都可以像处理 RealSubject 对象一样处理 Proxy 对象。
- Proxy 对象持有 Subject 的引用,所以必要时它可以将请求转发给 Subject。
- RealSubject 通常是真正做事的对象,proxy 会控制对 RealSubject 的访问。
动态代理
动态代理(Dynamic Proxy),就是我们不事先为每个原始类编写代理类,而是在运行的时候,动态地创建原始类对应的代理类,然后在系统中用代理类替换原始类。
应用场景
1. 业务系统的非功能性需求开发
在业务系统中开发一些非功能性需求,比如:监控、统计、鉴权、限流、事务、幂等、日志。我们将这些附加功能与业务功能解耦,放到代理类中统一处理,让程序员只需要关注业务方面的开发。
2. 代理模式在 RPC、缓存中的应用
RPC 框架也可以看作一种代理模式,在缓存中,我们可以代理接口,如果请求中带有支持缓存的字段,我们便从缓存中获取数据直接返回。