您的位置:首页 > 编程语言 > Java开发

Java静态代理与动态代理

2016-01-18 10:49 465 查看
package com.proxy;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;

interface ProductFactory{

public void productCloth();

}

class NikeProductFactory implements ProductFactory{

@Override
public void productCloth() {
// TODO Auto-generated method stub
System.out.println("this is nike productor");
}


}

/**

* 静态代理

* @author lilei7

*

*/

class StaticProxy implements ProductFactory{

private ProductFactory o ;

public StaticProxy(ProductFactory o){
this.o=o;
}

@Override
public void productCloth() {
// TODO Auto-generated method stub
System.out.println("this is proxy");
o.productCloth();

}


}

/**

* 动态代理

* @author lilei7

*

*/

class DynamicProxy implements InvocationHandler{

Object obj ;

public Object bindObject(Object obj){

this.obj = obj;

return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);

}

@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
System.out.println(obj);
return method.invoke(obj, args);
}


}

public class TestProxy {

public static void main(String[] args) {

//静态代理测试方法

NikeProductFactory nike = new NikeProductFactory();

StaticProxy staticProxy = new StaticProxy(nike);

staticProxy.productCloth();

//动态代理测试方法
DynamicProxy dynamicProxy = new DynamicProxy();
Object o = dynamicProxy.bindObject(nike);
ProductFactory factory = (ProductFactory)o;
factory.productCloth();
}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: