/*
* @author junin
* @date 2102-11-21
* @email junife@163.com
*/
package Proxy;
public interface Service
{
public void offerService();
}
/*
* @author junin
* @date 2102-11-21
* @email junife@163.com
*/
package Proxy;
public class PrintService implements Service
{
@Override
public void offerService()
{
System.out.println("Printing now!");
}
}
/*
* @author junin
* @date 2102-11-21
* @email junife@163.com
*/
package Proxy;
public class ScanService implements Service
{
@Override
public void offerService()
{
System.out.println("Scaning now!");
}
}
/*
* @author junin
* @date 2102-11-21
* @email junife@163.com
*/
package Proxy;
public class StaticProxy implements Service
{
Service service;
public StaticProxy(Service service)
{
this.service = service;
}
public void setServiceProxy(Service service)
{
this.service = service;
}
@Override
public void offerService()
{
this.beforeCall();
this.service.offerService();
this.afterCall();
}
public void beforeCall()
{
System.out.println("--BeforeCall--");
}
public void afterCall()
{
System.out.println("--AfterCall--");
}
}
/*
* @author junin
* @date 2102-11-21
* @email junife@163.com
*/
package Proxy;
public class StaticClient
{
public static void main(String[] args)
{
Service servicePrint = new PrintService();
Service scanPrint = new ScanService();
StaticProxy serviceProxy = new StaticProxy(servicePrint);
serviceProxy.offerService();
serviceProxy.setServiceProxy(scanPrint);
serviceProxy.offerService();
}
}
/*
* @author junin
* @date 2102-11-21
* @email junife@163.com
*/
package Proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class DynamicProxy implements InvocationHandler
{
private Object object;
public DynamicProxy (Object object)
{
super();
this.object = object;
}
@Override
public Object invoke(Object obj, Method method, Object[] args) throws Throwable
{
this.beforeCall();
method.invoke(object, args);
this.afterCall();
return null;
}
public void beforeCall()
{
System.out.println("--BeforeCall--");
}
public void afterCall()
{
System.out.println("--AfterCall--");
}
}
/*
* @author junin
* @date 2102-11-21
* @email junife@163.com
*/
package Proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class DynamicClient
{
public static void main(String[] args)
{
DynamicProxy dynamicProxy = new DynamicProxy(new PrintService());
Service service = (Service)Proxy.newProxyInstance(Service.class.getClassLoader(), new Class[]{Service.class}, dynamicProxy);
service.offerService();
dynamicProxy = new DynamicProxy(new ScanService());
service = (Service)Proxy.newProxyInstance(Service.class.getClassLoader(), new Class[]{Service.class}, dynamicProxy);
service.offerService();
}
}