动态代理(工厂模式)
接口类
package com. itchen. proxytest ; public interface Star { public abstract String sing ( String name) ; public abstract void dance ( ) ;
}
实体类
package com. itchen. proxytest ; public class BigStar implements Star { private String name; public BigStar ( String name) { this . name = name; } public BigStar ( ) { } @Override public String sing ( String name) { System . out. println ( this . name + "正在唱" + name) ; return "蟹蟹" ; } @Override public void dance ( ) { System . out. println ( this . name + "正在跳" ) ; } @Override public String toString ( ) { return "BigStar{" + "name='" + name + '\'' + '}' ; } public String getName ( ) { return name; } public void setName ( String name) { this . name = name; }
}
代理类
package com. itchen. proxytest ; import java. lang. reflect. InvocationHandler ;
import java. lang. reflect. Method ;
import java. lang. reflect. Proxy ;
public class ProxyUtil { public static Star createProxy ( BigStar bigStar) { Star star = ( Star ) Proxy . newProxyInstance ( ProxyUtil . class . getClassLoader ( ) , new Class [ ] { Star . class } , new InvocationHandler ( ) { @Override public Object invoke ( Object proxy, Method method, Object [ ] args) throws Throwable { if ( "sing" . equals ( method. getName ( ) ) ) { System . out. println ( "准备话筒" ) ; } else if ( "dance" . equals ( method. getName ( ) ) ) { System . out. println ( "准备场地" ) ; } return method. invoke ( bigStar, args) ; } } ) ; return star; }
}
测试类
package com. itchen. proxytest ; public class Test { public static void main ( String [ ] args) { BigStar bigStar = new BigStar ( "鸡哥" ) ; Star proxy = ProxyUtil . createProxy ( bigStar) ; String result = proxy. sing ( "梦回还" ) ; proxy. dance ( ) ; System . out. println ( result) ; }
}