import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//接口
interface MyInterface {
public void action();
}
// 被代理類
class MyObject implements MyInterface {
@Override
public void action() {
System.out.println("我是被代理類,執行action!");
}
}
//被代理接口
interface ClothFactory{
public void productCloth();
}
//被代理類
class NikeClothFactory implements ClothFactory{
@Override
public void productCloth() {
System.out.println("我是被代理類,Nike 生產衣服");
}
}
//實現InvocationHandler接口的子類
class MyInvocationhandler implements InvocationHandler {
private Object obj;
public void setObject(Object obj) {
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("動態代理類執行,收代理費");
Object returnVal = method.invoke(obj, args);
return returnVal;
}
}
//動態代理類
class MyProxy {
public static Object getProxyInstance(Object obj, InvocationHandler handler) {
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj
.getClass().getInterfaces(), handler);
}
}
public class TestProxy {
/**
* @Title: main
* @Description:
* @param:
* @return void
* @user: wangzg
* @Date:2014-10-27
* @throws
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//被代理類
MyObject myObject = new MyObject();
MyInvocationhandler myInvocationhandler = new MyInvocationhandler();
myInvocationhandler.setObject(myObject);
Object myProxy = MyProxy.getProxyInstance(myObject, myInvocationhandler);
MyInterface myInterface = (MyInterface)myProxy;
myInterface.action();
NikeClothFactory nikeClothFactory = new NikeClothFactory();
myInvocationhandler.setObject(nikeClothFactory);
Object myProxyNike = MyProxy.getProxyInstance(nikeClothFactory, myInvocationhandler);
ClothFactory clothFactory = (ClothFactory)myProxyNike;
clothFactory.productCloth();
}
}
代理模式之動態代理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.