代理模式就是给一个对象提供一个代理对象,由这个代理对象控制对原对象的引用,
使代理类在客户端和原对象之间起到一个中介的作用!!!
概念说多了没用,直接上代码!------->>>>>>>>动态代理
动态代理是为了解决一个业务一个代理,代理类过多的问题。
代理类都必须实现InvocationHandler接口。
package com.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class TimeProxy implements InvocationHandler{
private Object obj;
// 绑定代理对象
public Object bind(Object obj){
this.obj = obj;
<span style="color:#ff0000;">return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);</span>
}
// 实现代理
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = null;
long startTime = System.nanoTime(); //获取开始时间
<span style="color:#ff0000;">result = method.invoke(obj, args);</span>
long endTime = System.nanoTime();// 获取结束时间
System.out.println("计算运行时间:" + (endTime - startTime) + "ns");
return result;
}
}
package com.proxy;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
TimeProxy timeProxy = new TimeProxy();
<span style="color:#ff0000;">SalaryInterface sin = (SalaryInterface) timeProxy.bind(new Salary());</span>
sin.doSalary();
TaxInterface ta = (TaxInterface) timeProxy.bind(new Tax());
ta.doTax();
}
}
接口和目标类
public interface SalaryInterface {
public void doSalary();
}
public class Salary implements SalaryInterface{
public void doSalary() {
System.out.println("进行薪资计算逻辑处理");
}
}
public interface TaxInterface {
public void doTax();
}
public class Tax implements TaxInterface{
public void doTax() {
System.out.println("进行所得税的逻辑处理!");
}
}