设计模式系列-代理模式

设计模式系列-代理模式
引入代理:
现有一个导出文件的功能.现在需要记录每次导出文件所消耗的时间.如何实现?

使用代理类对原有类增强.
给主体加附加功能(不影响主体):在不需要原来的作者明确改动代码的情况下添加新功能。比如你没有原来的代码但想添加新功能,或者你需要的新功能仅用于某个地方而原来的功能用到更多的地方,所以不打算修改原来的功能而只是定制你新加的这部分
代理分为静态代理 和 动态代理

静态代理
/**
 * 导出器代理类(静态代理)
 * 
 * "代理类"与"被代理类"需要实现相同的接口(IFileExportor).
 * 代理类要关联"被代理类",代理类只对原始功能增强,实际功能交给被代理类执行
 * 
 * @author live
 * @2019年12月30日 @下午3:42:09
 */
 
 缺点:
 1)被代理类增改方法,静态代理类需要改变
 2)一个静态代理类,只能代理同一接口下的实现类.demo中"导出代理类"(ExportorProxy*代理了IFileExportor的实现类,如果需要代理"导入"类,则需要增加"导入代理类"
 
 
 动态代理

方式一:
JDK Proxy :必须实现至少一个接口才能实现对方法的拦截。
动态代理类:
 * 1.必须实现 InvocationHandler 接口,并且实现该接口中的invoke()
  //import java.lang.reflect.InvocationHandler;
  
优点
1)被代理类增改方法,动态代理类无需做任何改动
2)代理任何接口类

代码地址:

github:https://github.com/sunxiaoning90/com_live_test   (具体目录:com_live_test_designpattern

发布了48 篇原创文章 · 获赞 4 · 访问量 3224

猜你喜欢

转载自blog.csdn.net/Sunxn1991/article/details/103771051
今日推荐