趣学设计模式 - 代理模式
复制代码
定义
给某一个对象提供代理,并且由代理对象控制对原对象的引用,所以其核心类是代理类。
实现
以下是代理模式的结构图:
光说不练假把式
我们以书上的给的例子进行 code 一步一步敲代码
给出了调用者 Client 的代码
复制代码
这个是代理对象的
复制代码
最后是真实对象的
复制代码
输出结果
复制代码
静态代理
等待更新
动态代理
jdk 的动态代理
利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用 InvokeHandler 来处理。
cglib 的动态代理
是利用 asm 的开源包,对被代理对象类的 class 文件加载进来,通过修改其字节码生成的子类来处理。
应用场景
业务系统的非功能性需求开发
监控、统计、限流、事物、幂、日志。
如图中,当你去找代购购买商品的时候,代购作为代理者可以去验证你的身份并且有相应的日志记录。这些是和业务系统的非功能性的需求开发。
RPC 以及缓存中
好处
代理模式可以去掉客户看不到的内容和服务或者增添额外客户需要的服务。
和装饰模式相比
源码链接🔗
参考资料
版权声明: 本文为 InfoQ 作者【ZuccRoger】的原创文章。
原文链接:【http://xie.infoq.cn/article/d4454c80300b11a3463351b4d】。文章转载请联系作者。
评论