代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。
Java开发中的开闭原则,对扩展开放,对修改关闭,所以当功能不满足需求时,应当避免直接修改源代码,而是应该对其进行扩展
创建接口 TargetInte
创建目标类 TargetInteImpl
测试类
测试结果
代理的作用就是对目标方法进行功能增强
假设现在目标方法中的功能已经不能满足我们的需求,我们需要在目标方法的原有功能之前增加【输出当前时间】的功能,原有功能之后增加【输出执行结果】的功能,为了符合Java开发的开闭原则,我们不在目标实现类中直接对代码进行修改,而是为目标类创建一个代理类
jdk的动态代理要求目标类必须是接口的实现类,如果目标类不是接口的实现类就不能使用jdk的动态代理
创建InvocationHandler类 InvocationHandlerProxy
该类实现了 InvocationHandler 接口和接口中的invoke方法,方法中是代理的功能,包括目标方法中的功能和扩展的功能
测试类
前面只是定义了代理的功能,在测试类中我们要创建代理
语法:Proxy.newProxyInstance(目标类加载器,目标类实现的接口,代理执行的操作)
,类型为接口类型
代理调用方法时实际是调用 InvocationHandler类中的 invoke 方法,也就相当于调用功能增强的目标方法
测试结果
不对目标方法进行修改,通过jdk的动态代理来为目标方法增加额外的功能