设计模式之--静态代理及动态代理模式
原文链接:http://www.studyshare.cn/blog/details/1181/0
一、概念
代理模式:为其他对象提供一种代理类用以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用
另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,代理模式属于23中设计模式中的结构型设计模式。
代理模式可分为静态代理和动态代理。
代理结构如下图:
![](https://upload-images.jianshu.io/upload_images/14253062-063ec1de5aadf3d5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
例如:客户(客户类)—》代购(代理类)—》海外下单(海外订单类),普通客户无法直接去海外下单,则向代购公司
下单,代购公司去海外购买并提供给客户。此时代购公司就是客户的代理。
java开发工具下载地址及安装教程大全,点这里。
更多深度技术文章,在这里。
二、静态代理
1、概念
所谓静态代理即由编程人员或者工具生成代理类的源码,再编译代理类,也就是在程序运行前就已经存在代理类的字节码文
件,代理类和委托类的关系在运行前就确定了。
2、案例分析
(1)订单接口
![](https://upload-images.jianshu.io/upload_images/14253062-19d723a746998f7b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
(2)第三方订单实现类
![](https://upload-images.jianshu.io/upload_images/14253062-53ca2aebe825e9aa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
(3)代理类
![](https://upload-images.jianshu.io/upload_images/14253062-9d57fdc60c245bff.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
三、动态代理
1、概念
动态代理是在实现阶段不用关心代理类,而在运行阶段才指定哪一个对象。当需要对某个类实现无侵入性增强其功能的时候,
则使用动态代理,例如mybatis的sql日志打印功能等
2、案例分析
(1)、用户接口
![](https://upload-images.jianshu.io/upload_images/14253062-135e8d79d3bafe1e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
(2)、接口实现类
![](https://upload-images.jianshu.io/upload_images/14253062-67e3636f25b3e840.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
(3)、功能增强实现类
![](https://upload-images.jianshu.io/upload_images/14253062-50b38e30804deb14.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
(4)、测试类
![](https://upload-images.jianshu.io/upload_images/14253062-83909b1343ee7eba.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
(5)、打印输出结果
![](https://upload-images.jianshu.io/upload_images/14253062-4f1e9bca8722d50a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](https://upload-images.jianshu.io/upload_images/14253062-2ac820f0af180a0e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
原创文章,转载请注明出处。
java开发工具下载地址及安装教程大全,点这里。
更多深度技术文章,在这里。