package com.selfStudy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface Subject{
void doSomething(String args);
void doSomething();
}
class RealSubject implements Subject{
public void doSomething(){
System.out.println(" RealSubject dosothming");
}
public void doSomething(String args) {
System.out.println("i will sumbit this "+args+" to our Web service");
}
}
class ProxySubject implements Subject{
private Subject real=null;
ProxySubject(Subject real){
this.real = real;
}
@Override
public void doSomething(String args) {
System.out.println("frist , examine the network");
real.doSomething(args);
}
@Override
public void doSomething() {
System.out.println("proxySubject dosomething");
real.doSomething();
}
}
class DynamicProxy implements InvocationHandler{
private Object proxied;
public DynamicProxy(Object proxied){
this.proxied = proxied;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if(args!=null)
return method.invoke(proxied, args);
return method.invoke(proxied);
}
}
public class ProxyModel {
public static void main(String[] args) {
ProxySubject ps = new ProxySubject(new RealSubject());
ps.doSomething();
ps.doSomething("seek people");
RealSubject real = new RealSubject();
Subject proxy = (Subject)Proxy.newProxyInstance(Subject.class.getClassLoader(),
new Class[]{Subject.class},new DynamicProxy(real));
proxy.doSomething("hahahah");
}
}