public static void main(String[] args) {
Batman batman=new Batman();//创建一个代理类的对象
Object object=MyProxy.getProxyInstance(batman);//返回一个代理类的对象
Human human=(Human)object;
human.info();//通过代理类的对象调用重写抽象方法
human.fly();
//////////////////////////////////////
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
NikeClothFactory ncf=new NikeClothFactory();
Object oo=MyProxy.getProxyInstance(ncf);
Clothproduct cp=(Clothproduct)oo;
cp.productCloth();
}
}
interface Human{//人类接口
void fly();//两抽象方法
void info();
}
class Batman implements Human{//蝙蝠侠继承人类
@Override
public void info() {
System.out.println("请叫我蝙蝠侠");
}
@Override
public void fly() {
System.out.println("飞天小蝙蝠");
}
}
class MyInvocationhandler implements InvocationHandler {
Object object;//声明被代理类
public void setObject(Object o){//实例化被代理类,返回一个代理类的对象
this.object=o;
}
@Override//当通过代理类的对象发起对被重写方法的调用时,都会转成对如下invoke的调用
public Object invoke(Object proxy, Method method, Object[] args) throws Exception{
HumanUtil humanUtil=new HumanUtil();
humanUtil.method1();
Object returnVal=method.invoke(object,args);
humanUtil.method2();
return returnVal;
}
}
class HumanUtil{
public void method1(){
System.out.println("$$$$$$$$$$$$$$$$4Method___1$$$$$$$$$$$$$$$$");
}
public void method2(){
System.out.println("$$$$$$$$$$$$$$$$Method___2$$$$$$$$$$$$$$$$");
}
}
class MyProxy{
public static Object getProxyInstance(Object object){//方法——动态创建代理类的对象
MyInvocationhandler myInvocationhandler=new MyInvocationhandler();
myInvocationhandler.setObject(object);
return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),myInvocationhandler);
}
}
$$$$$$$$$$$$$$$$4Method___1$$$$$$$$$$$$$$$$
请叫我蝙蝠侠
$$$$$$$$$$$$$$$$Method___2$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$4Method___1$$$$$$$$$$$$$$$$
飞天小蝙蝠
$$$$$$$$$$$$$$$$Method___2$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$4Method___1$$$$$$$$$$$$$$$$
nike make cloth
$$$$$$$$$$$$$$$$Method___2$$$$$$$$$$$$$$$$