java动态代理
标题 代理介绍
每一个业务都分为业务准备工作、业务核心工作、业务收尾工作这三个阶段,如果我们只想做的是业务的核心工作,那么我们就可以委托一个代理者来帮我们做剩下的其它工作,这种工作做方式称为代理模式。例如 当我们想买一部车,但又不想亲自去寻找商店,选品牌,讲价等等工作,此时就可以委托一个人替我们去办这些事,等他都弄好了到付钱的时候我们直接付钱就ok。
直接上代码
//业务接口
interface Buy{
void buyCar(String bread);
}
//真实类
class Person implementsBuy{
@Override
public void buyCar(String bread) {
System.out.println("【购买车辆】"+bread);
}
}
//代理类需要实现接口InvocationHandler接口
class Proxyer implements InvocationHandler{
//真实类的对象,用于真实访问
public Object target = null;
public Proxyer(Object target){
this.target = target;
}
public <T> T getProxy(){//因为不知道要为那个接口做代理所以返回一个泛型
return (T) Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(),this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("代理业务开始。。。。");
Object result;
result = method.invoke(target,args);
System.out.println("业务完成。。。");
return result;
}
}
//测试类
class DomeProxy{
public static void main(String[] args) {
Message person = new Person();
Message proxy = new Proxyer(person).getProxy();
Buy proxy1 = new Proxyer(person).getProxy();
proxy1.buyCar("法拉利");
}
}