代理模式解决不同请求和相应的目标对象的中介作用,实现面向接口编程,封装对象的行为实现
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();
分享到:
相关推荐
代理模式其实用现实来理解就是班长模式,在一个班上所有的同学都可以入党,都可以参加“程序员”考试,都可以参加CET考试,但是这些考试都是由班长代报的名我们去做! 程序员的理解: 代理模式就是继承至同一父类的...
对代理模式与Java动态代理类的理解说明
设计模式之代理模式,简单易于理解
青山_20200626_理解代理模式MyBatis就掌握了一半.mp4
代理,动态代理,讲解的很清晰
该资源提供了三种代理模式的使用代码,其中包含每种模式的jar包、具体代码、Demo测试类,详细的注释帮助你来理解。
代理设计模式、命令模式学习笔记,其中包含对模式的理解以及详细的模式使用示例
代理简介,静态代理,动态代理,23种设计模式之一,拦截器在在流行的开源框架中很常见,依赖的技术就是Java的动态代理。 理解拦截器的核心原理对理解这些开源框架的体系结构至关重要。 下面以一个简单的模型的...
- 代理模式 - 静态代理与动态代理 - 常见的动态代理实现 - JDK Proxy - CGLIB - JDK Proxy 和 CGLIB 的对比 - 动态代理的实际应用 - Spring AOP 说在前面:今天我们来聊一聊 Java 中的代理,先来聊聊故事...
C#写的一份包含代理模式Proxy的基本实现代码和一个应用案例代码,有助于Proxy的理解和学以致用。
深入理解JavaScript系列(31):设计模式之代理模式 深入理解JavaScript系列(32):设计模式之观察者模式 深入理解JavaScript系列(33):设计模式之策略模式 深入理解JavaScript系列(34):设计模式之命令模式...
理解Spring代理模式工作原理
代理模式的C++实例。适合初学者结合教程理解代理模式。
此资源为文章中《代理设计模式:静态代理和动态代理的理解、实现与区别(优缺点)》与《 AOP动态代理声明式的3种配置方式过程与区别》的案例代码,可下载参考学习。
NULL 博文链接:https://jacky-dai.iteye.com/blog/2302930
Java代理模式 事例很生动,非常容易理解,推荐给大家。
用幽默的方式写下这些设计模式,代码里面有相应注解,不会很难理解,每个包里面有1-2个代码事例,还有一点小说明,还有本人qq,现在只有5种,其他的设计模式期待下一个版本吧!