我们在Android开发种经常会在源码中看到动态代理,今天我们就来聊聊代理模式。
代理模式是干嘛的呢? 代理模式可以在不改变原有类逻辑代码的情况下,操控该类对该类,可以对该类的进行功能上修改或增强。
举例子环节到了,先来一个静态代理模式:
public interface HrAction {
void action();
}
public class HrWorker implements HrAction {
@Override
public void action() {
Log.d("hr","招聘,裁人,等等工作");
}
}
public class HrProxy implements HrAction{
HrAction hrAction;
public HrProxy(HrAction hrAction) {
this.hrAction = hrAction;
}
@Override
public void action() {
Log.d("","action1");
hrAction.action();
Log.d("","action2");
}
}
public class HrWorker implements HrAction {
@Override
public void action() {
Log.d("hr","招聘,裁人,等等工作");
}
}
public class Test {
void test(){
HrWorker hrWorker=new HrWorker();
HrProxy hrProxy=new HrProxy(hrWorker);
hrProxy.action();
}
}
作为一个代理类如果每次都需要转入不同对象,那也太不方便了,所以就引申了动态代理。
动态代理主要是对代理类的修改:
public class HrProxy implements InvocationHandler{
private Object object = null;
public HrProxy(Object object) {
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Log.d("","");
Object obj=method.invoke(object,args);
return obj;
}
}
代理类继承一个InvocationHandler接口,实现invoke方法。
void test(){
HrWorker hrWorker=new HrWorker();
HrProxy hrProxy=new HrProxy(hrWorker);
ClassLoader classLoader=hrWorker.getClass().getClassLoader();
HrWorker hrWorker1= (HrWorker) Proxy.newProxyInstance(classLoader,new Class[]{},hrProxy);
hrWorker1.action();
}
调用的时候需要通过Proxy.newProxyInstance()方法来生产代理类。
代理模式&spm=1001.2101.3001.5002&articleId=105882070&d=1&t=3&u=17121260e5684830a0cc4a88d233cf76)
693

被折叠的 条评论
为什么被折叠?



