- 论坛徽章:
- 0
|
接口;
public interface Subject {
public void request();
}
实际类:
public class RealSubject implements Subject {
public RealSubject(){
}
public void request(){
System.out.println("这是个真实的对象");
}
}
代理类:
public class DynamicSubject implements InvocationHandler{
private Object proxyobj;
public DynamicSubject(Object obj){
this.proxyobj=obj;
}
public static Object factory(Object obj){
Class?> cls=obj.getClass();
//classloader interface invocationhandler实例
return Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),new DynamicSubject(obj));
}
public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
System.out.println("before calling....................");
Object object=method.invoke(proxyobj,args);
System.out.println("after calling....................");
return object;
}
}
主方法调用:
public static void main(String[] args) {
/**
* 使用或者是的声明方式,意味着您只能通过该名称来取得所参考
* 实例的信息,或者是移除某些信息,但不能增加它的信息,因为只知道当中放置的是SomeClass
* 的子类,但是不能确定是什么类的实例,编译器不让您加入信息
*/
/**
* 静态代码快在构造函数之前执行,且只执行一次
*/
Subject s=(Subject)DynamicSubject.factory(new RealSubject());
s.request();
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/76927/showart_1979422.html |
|