静态代理:
Subject: 抽象主题类(顶层接口)
public interface ILawsuit {
void submit();
void burden();
void defend();
void finish();
}
委托者(真实主题类)
public class Civilian implements ILawsuit {
private static final String TAG = "civlian";
@Override
public void submit() {
Log.d(TAG, "submit: 起诉者");
}
@Override
public void burden() {
Log.d(TAG, "burden: 起诉者");
}
@Override
public void defend() {
Log.d(TAG, "defend: 起诉者");
}
@Override
public void finish() {
Log.d(TAG, "finish: 起诉者");
}
}
静态代理者:
public class Lawyer implements ILawsuit {
private Civilian civilian;
public Lawyer(Civilian civilian) {
this.civilian = civilian;
}
@Override
public void submit() {
civilian.submit();
}
@Override
public void burden() {
civilian.burden();
}
@Override
public void defend() {
civilian.defend();
}
@Override
public void finish() {
civilian.finish();
}
}
静态代理实现方式
private void initProxy() {
ILawsuit civilian=new Civilian();
ILawsuit laywer=new Lawyer((Civilian) civilian);
laywer.submit();
laywer.burden();
laywer.defend();
laywer.finish();
}

动态代理
动态代理类
public class DynamicProxy implements InvocationHandler {
private Object object;
public DynamicProxy(Object object) {
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
long stime = System.currentTimeMillis();
Object rusult=method.invoke(object,args);
long ftime = System.currentTimeMillis();
System.out.println("执行任务耗时"+(ftime - stime)+"毫秒");
return rusult;
}
}
动态代理实现方式
private void initDynamicProxy() {
ILawsuit iLawsuit=new Civilian();
DynamicProxy dynamicProxy=new DynamicProxy(iLawsuit);
ClassLoader classLoader=iLawsuit.getClass().getClassLoader();
ILawsuit laywer= (ILawsuit) Proxy.newProxyInstance(classLoader,new Class[]{ILawsuit.class},dynamicProxy);
laywer.submit();
laywer.defend();
laywer.burden();
laywer.finish();
}
