代理模式:是对象的结构模式,它给某个对象提供一个代理对象,并由代理对象控制对原对象的引用。
所谓代理,就是一个人或一个机构代表另一个人或另一个机构采取行动。
代理模式的结构:抽象主题、代理主题,真实主题。
(1)抽象主题
package com.javapatterns.proxy;
public abstract class Subject {
public abstract void request();
}
(2)真实主题
package com.javapatterns.proxy;
public class RealSubject extends Subject {
public RealSubject() {}
public void request() {
System.out.println("From real subject.");
}
}
(3)代理主题
package com.javapatterns.proxy;
public class ProxySubject extends Subject {
private RealSubject realSubject;
public ProxySubject() {}
public void request() {
preRequest();
if ( realSubject == null ) {
realSubject = new RealSubject();
}
realSubject.request();
postRequest();
}
}
怎样调用代理主题?
Subject subject = new ProxySubject();
subject.request();
Java 2.0对代理模式的支持
自从JDK 1.3,java.lang.reflect包提供了直接支持代理模式的3个类:Proxy、InvocationHandler,Method。
Proxy类使得设计师能够在运行时间创建代理对象,当系统有了一个代理对象后,对原对象的方法的调用,会分派给一个调用处理器(Invocation Handler)。程序可以在调用处理器的invoke()方法中截获这个调用。
package com.javapatterns.proxy.reflect;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.lang.reflect.Method;
import java.util.Vector;
import java.util.List;
public class VectorProxy implements InvocationHandler {
private Object proxyobj;
public VectorProxy(Object obj) {
proxyobj = obj;
}
public static Object factory(Object obj) {
Class cls = obj.getClass();
return Proxy.newProxyInstance( cls.getClassLoader(),
cls.getInterfaces(),
new VectorProxy(obj) );
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before calling " + method);
if (args != null) {
for (int i=0; i<args.length; i++) {
System.out.println(args[i] + "");
}
}
Object o = method.invoke(proxyobj, args);
System.out.println("after calling " + method);
return o;
}
public static void main(String[] args) {
List v = null;
v = (List) factory(new Vector(10));
v.add("New");
v.add("York");
}
}
分享到:
相关推荐
代理模式(Proxy) 定义: 为其他对象提供一种代理以控制对这个对象的访问 结构: 由三部分组成 1.RealSubject(真实对象): 真正会调用到的对象 2.Proxy(代理对象): 代理真实对象的地方 3.Subject(共同点): 代理对象...
JAVA设计模式之代理模式实例
代理模式.ppt代理模式.ppt代理模式.ppt
本程序是一个代理模式的小例子。程序比较简单。
设计模式-代理模式(讲解及其实现代码)
深信服网闸代理模式配置教程
//代理模式内部引用了真实角色 public void requst() { this.preRequest(); //在真实角色操作之前所附加的操作 if(null == realsubject) { realsubject = new ReallSubject(); } realsubject.requst(); // ...
设计模式--代理模式设计模式--代理模式设计模式--代理模式设计模式--代理模式设计模式--代理模式
代理模式代理模式代理模式
自己总结的代理模式和Java中的动态代理模式,有源码
代理模式: 为其他对象提供一种代理以控制对这个对象的访问。 代理模式的主要作用是,用来控制真实对象的访问权限,也就是完全对外隐藏真实对象。以及在调用真实对象时,代理还可以额外的处理另外的事。 比如下面...
代理模式的小demo
自己写的一个代理模式的示例,供大家参考 自己写的一个代理模式的示例,供大家参考 自己写的一个代理模式的示例,供大家参考
用java实现代理模式,使用房屋中介的现实例子进行代理模式的说明
Java设计模式之代理模式(结构)Java设计模式之代理模式(结构)Java设计模式之代理模式(结构)Java设计模式之代理模式(结构)Java设计模式之代理模式(结构)
该资源提供了三种代理模式的使用代码,其中包含每种模式的jar包、具体代码、Demo测试类,详细的注释帮助你来理解。
设计模式C++学习之代理模式(Proxy)
.net实现设计模式之代理模式