java设计模式26_动态代理模式

来源:互联网 发布:毕向东java教程全集 编辑:程序博客网 时间:2024/06/05 17:00

动态代理模式

代理模式是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个真实对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。

实现

这个例子以代理银行的借款和收款说明

代码

package com.test;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;//第1步,银行的借款和收款接口业务接口interface IBank {    void jiekuan();    void shoukuan();}// 第2步, 代理人,代理银行的借款收款业务class Person implements IBank {    @Override    public void jiekuan() {        System.out.println("向银行借款");    }    @Override    public void shoukuan() {        System.out.println("还款给银行");    }}// 第3步,代理类,需要实现InvocationHandler 接口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步,实现代理public class Test {    public static void main(String[] args) {        Person p = new Person();        MyInvokeHandler myInvokeHandler = new MyInvokeHandler();        IBank iBank = (IBank) myInvokeHandler.getRealObject(p);        iBank.jiekuan();        iBank.shoukuan();    }}

运行结果:

向银行借款还款给银行