1. Interface Class (Abstract role)
Public interface ihello {
Public void Hello (string name );
}
2. Interface implementation (real role) public class helloimpl implements ihello {
@ Override
Public void Hello (string name ){
System. Out. println ("hello," + name );
}
}
3. Proxy implementation (proxy role)
Code
Import java. Lang. Reflect. invocationhandler;
Import java. Lang. Reflect. method;
Import java. Lang. Reflect. proxy;
Public class helloproxyimpl implements invocationhandler {
Private object delegate;
Public object BIND (Object delegate ){
This. Delegate = delegate;
Return proxy. newproxyinstance (delegate. getclass (). getclassloader (),
Delegate. getclass (). getinterfaces (), this );
}
@ Override
Public object invoke (Object proxy, method, object [] ARGs)
Throws throwable {
Object result = NULL;
Try {
Print ("before call" + method );
Result = method. Invoke (delegate, argS );
Print ("after call" + method );
} Catch (exception e ){
Print (E. tostring ());
}
Return result;
}
Private void print (string message ){
System. Out. println (Message );
}
4. Use a proxy
Public class demo {
Public static void main (string [] ARGs ){
Helloproxyimpl proxy = new helloproxyimpl ();
Ihello helloproxy = (ihello) proxy. BIND (New helloimpl ());
Helloproxy. Hello ("Spring ");
}
}