设计模式(六)代理模式

我们在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()方法来生产代理类。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值