java动态代理模式

来源:互联网 发布:php 地理位置距离最近 编辑:程序博客网 时间:2024/06/03 13:34

1、银行的借款和收款接口业务

/** * Created by lyl on 00023 8/23. */public interface IBank {    void jiekuan();    void shoukuan();}

2、代理人,代理银行的借款收款业务

public class Person implements IBank {    @Override    public void jiekuan() {        Log.d("Log","向银行借款");    }    @Override    public void shoukuan() {        Log.d("Log","还款给银行");    }}

3、代理类,需要实现InvocationHandler 接口

import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * 代理类 * Created by lyl on 00004 9/04. */public class MyInvokeHandler implements InvocationHandler {    private Object realObject;    @Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        if (realObject == null)            return null;        return method.invoke(realObject, args);    }    public Object getRealObject(Object realObject) {        if (realObject == null)            return null;        this.realObject = realObject;        Class c = realObject.getClass();        return Proxy.newProxyInstance(c.getClassLoader(), c.getInterfaces(), this);    }}

4、使用(代码片段)

Person p = new Person();MyInvokeHandler myInvokeHandler = new MyInvokeHandler();IBank iBank = (IBank) myInvokeHandler.getRealObject(p);iBank.jiekuan();iBank.shoukuan();
原创粉丝点击