[设计模式]代理模式 (二)

2014-11-24 11:19:59 · 作者: · 浏览: 5
{
System.out.println("before...");
obj = method.invoke(target,args);
System.out.println("after...");
}
else
{
obj = method.invoke(target,args);
}
return obj;


}
}

class Main//测试
{
public static void main(String[] args)
{
SubjectImpl subimpl = new SubjectImpl();
InvocationHandlerImpl handler = new InvocationHandlerImpl(subimpl);


Subject sub = (Subject)Proxy.newProxyInstance(subimpl.getClass().getClassLoader(),
subimpl.getClass().getInterfaces(),handler);
sub.fun();
}
}

class InvocationHandlerImpl implements InvocationHandler
{
private Object target = null;
InvocationHandlerImpl(Object target)
{
this.target = target;
}
public Object invoke(Object proxy,Method method,Object[] args)throws Throwable
{
Object obj = null;
if(method.getName().equals("fun"))
{
System.out.println("before...");
obj = method.invoke(target,args);
System.out.println("after...");
}
else
{
obj = method.invoke(target,args);
}
return obj;


}
}

class Main//测试
{
public static void main(String[] args)
{
SubjectImpl subimpl = new SubjectImpl();
InvocationHandlerImpl handler = new InvocationHandlerImpl(subimpl);


Subject sub = (Subject)Proxy.newProxyInstance(subimpl.getClass().getClassLoader(),
subimpl.getClass().getInterfaces(),handler);
sub.fun();
}
}

2. 通过匿名内部类方式使用:

[java]
class Main
{
public static void main(String[] args)
{
final SubjectImpl sub = new SubjectImpl();
Subject su = (Subject)Proxy.newProxyInstance(sub.getClass().getClassLoader(),
sub.getClass().getInterfaces(),new InvocationHandler()
{
public Object invoke(Object proxy,Method method,Object[] args)throws Throwable
{
Object obj = null;
if(method.getName().equals("func"))
{
System.out.println("before...");
obj = method.invoke(sub,args);
System.out.println("after...");
}
else
{
obj = method.invoke(sub,args);
}
return obj;
}
}
);
su.fun();
}
}

class Main
{
public static void main(String[] args)
{
final SubjectImpl sub = new SubjectImpl();
Subject su = (Subject)Proxy.newProxyInstance(sub.getClass().getClassLoader(),
sub.getClass().getInterfaces(),new InvocationHandler()
{
public Object invoke(Object proxy,Method method,Object[] args)throws Throwable
{
Object obj = null;
if(method.getName().equals("func"))
{
System.out.println("before...");
obj = method.invoke(sub,args);
System.out