代理模式——动态代理
2008-09-24 10:20
288 查看
java语言通过java.lang.reflect苦,提供了三个类直接支持代理模式:Proxy,InvocoationHandler,Method三个类。
Prxoy能在运行时间创建代理对象,当系统有一个代理对象后,对源对象的方法调用会首先被分派给一个调用处理器(InvocationHandler接口),InvocationHandler接口中有一个invoke()方法,程序可以在调用处理器的invoke()方法中截获这个调用,进行额外的操作。
public interface SaleComputer {
public void sale(String type);
}
public class ComputerMaker implements SaleComputer {
public void sale(String type) {
System.out.println("卖出了一台"+type+"电脑");
}
}
public class ComputerProxy {
public static SaleComputer getComputerMaker(){
ProxyFunction pf=new ProxyFunction();
return (SaleComputer)Proxy.newProxyInstance(ComputerMaker.class.getClassLoader(), ComputerMaker.class.getInterfaces(), pf);
}
}
public class ProxyFunction implements InvocationHandler {
private ComputerMaker cm;
public void youHui(){
System.out.println("我给你一些优惠。。。");
}
public void giveMouse(){
System.out.println("我还要送你一个鼠标。。。 ");
}
public Object invoke(Object arg0, Method arg1, Object[] arg2)
throws Throwable {
String type=(String)arg2[0];
if(type.equals("联想")||type.equals("三星")){
if(cm==null){
cm=new ComputerMaker();
youHui();
giveMouse();
arg1.invoke(cm, type);
}
}else{
System.out.println("我没有你要的这个牌子的电脑。。。。");
}
return null;
}
}
public class Test {
public static void main(String[] args) {
SaleComputer sc=ComputerProxy.getComputerMaker();
//sc.sale("联想");
//sc.sale("三星");
sc.sale("Dell");
}
}
Prxoy能在运行时间创建代理对象,当系统有一个代理对象后,对源对象的方法调用会首先被分派给一个调用处理器(InvocationHandler接口),InvocationHandler接口中有一个invoke()方法,程序可以在调用处理器的invoke()方法中截获这个调用,进行额外的操作。
public interface SaleComputer {
public void sale(String type);
}
public class ComputerMaker implements SaleComputer {
public void sale(String type) {
System.out.println("卖出了一台"+type+"电脑");
}
}
public class ComputerProxy {
public static SaleComputer getComputerMaker(){
ProxyFunction pf=new ProxyFunction();
return (SaleComputer)Proxy.newProxyInstance(ComputerMaker.class.getClassLoader(), ComputerMaker.class.getInterfaces(), pf);
}
}
public class ProxyFunction implements InvocationHandler {
private ComputerMaker cm;
public void youHui(){
System.out.println("我给你一些优惠。。。");
}
public void giveMouse(){
System.out.println("我还要送你一个鼠标。。。 ");
}
public Object invoke(Object arg0, Method arg1, Object[] arg2)
throws Throwable {
String type=(String)arg2[0];
if(type.equals("联想")||type.equals("三星")){
if(cm==null){
cm=new ComputerMaker();
youHui();
giveMouse();
arg1.invoke(cm, type);
}
}else{
System.out.println("我没有你要的这个牌子的电脑。。。。");
}
return null;
}
}
public class Test {
public static void main(String[] args) {
SaleComputer sc=ComputerProxy.getComputerMaker();
//sc.sale("联想");
//sc.sale("三星");
sc.sale("Dell");
}
}
相关文章推荐
- 设计模式学习笔记(三)动态代理模式
- 设计模式之--动态代理
- .NET:动态代理的 “5 + 1” 模式
- 代理模式(Proxy Pattern)(二):Java API中的动态代理
- Android动态加载进阶 代理Activity模式
- [jvm解析系列][十四]动态代理和装饰模式,带你看源码深入理解装饰模式和动态代理的区别。
- 设计模式之动态代理-proxy
- 代理模式及Java实现动态代理
- 代理模式 动态代理 AOP
- 代理及动态代理模式(Proxy、DynamicProxy)
- 装饰模式&动态代理模式
- Java中的动态代理模式
- SSM框架day01——025——CGLIB动态代理模式、026——CGLIB动态代理模式的实现、027——CGLIB动态代理执行流程分析、CGLIB动态代理的MethodProxy参数
- java 动态代理模式
- 动态代理,工厂模式和反射技术
- Design Pattern—— Dynamic Proxy Pattern 动态代理模式
- 代理模式【介绍、静态代理、动态代理、入门、应用】
- 从代理模式到Java动态代理
- JAVA动态代理模式
- 反射实现 AOP 动态代理模式(Spring AOP 的实现原理)