代理模式之理解

本文介绍Java代理模式的应用及实现方式,通过实现InvocationHandler接口并在invoke()方法中定义代理行为,利用Proxy类创建代理实例。文章提供了一个购买电脑的示例,展示了如何在原有操作基础上增加额外的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代理模式解决不同请求和相应的目标对象的中介作用,实现面向接口编程,封装对象的行为实现
Java API中提供了对Proxy模式的支持,主要是通过反射(Reflect)包中的Proxy类和InvocationHandler接口实现,具体过程如下:

1) 实现InvocationHandler接口,在invoke()方法中实现代理类要完成的操作;
(2) 通过Proxy.newProxyInstance(ClassLoader loader,Class[]
interfaces,InvocationHandler h)方法生成一个代理类,从参数可以看出代理类将实现被代理对象的接口,而具体的实现过程是在上面实现的InvocationHandler.invoke()中定义的.

下面是代理模式的例子

对象的行为接口
package cn.oracle.computer;

public interface Computer {
/*
*zhangleming_2007-10-17
*/
public void buy();
}

package cn.oracle.computer;

/**
* @author zhangleming_2007-10-17
*
*/
接口实现
public class IBMComputer implements Computer {

/**
* zhangleming_2007-10-17
*/
public IBMComputer() {
// TODO Auto-generated constructor stub
}

/* (non-Javadoc)
* @see cn.oracle.computer.Computer#buy()
*/
public void buy() {
System.out.println("you had bought a IBM <>");
}

}

代理实现
package cn.oracle.computer;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
* @author zhangleming_2007-10-17
*
*/
public class ComputerProxy implements InvocationHandler {

private Object object;
/**
* zhangleming_2007-10-17
*/
public ComputerProxy() {

}
public Object bind(Object object){
this.object=object;
return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),this);
}
/* (non-Javadoc)
* @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
*/
public Object invoke(Object proxy, Method method, Object[] arg) throws Throwable {
Object result=method.invoke(object, arg);
System.out.println("赠送鼠标一个!");

return result;
}

}

测试

ComputerProxy cp=new ComputerProxy();
Computer c=(Computer) cp.bind(new IBMComputer());
c.buy();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值