标签:
代理模式(英语:Proxy Pattern)是程序设计中的一种设计模式。
所谓的代理者是指一个类可以作为其它东西的接口。代理者可以作任何东西的接口:网络连接、内存中的大对象、文件或其它昂贵或无法复制的资源。----WIKIPEDIA
代理模式就是找另外的一个对象作为代理去为你实施请求,代理模式分为两种,一种是静态代理模式,另外一种是动态代理模式,静态代理模式是代理类为其创建一个对象,将需要代理的类的对象赋予代理类中的该对象,让代理类中该对象去代替需要代理的类的对象去执行一定的任务。动态代理模式采用JDK的动态代理,根据其类加载器以及其实现的接口生成代理对象,通过反射机制实现动态代理。
假设这样的一个情景,文件都有打开的接口的,那么打开一个PDF文件的话,我这里可不可以使用代理模式去处理这样的一个情景呢,接下来设计了一个类图:
通过静态代理模式,PDFProxy对象作为PDFFile的代理对象,然后执行交给他的任务。
主要的代码(这里只贴出代理类的代码,全部代码:设计模式代码下载地址):
public class PDFProxy implements File{ private File file = null; @Override public void openFile() { if(file == null){ file = new PDFFile(); } file.openFile(); } }
PDFProxy proxy = new PDFProxy(); proxy.openFile();
使用JDK的动态代理,这里需要几个参数,类加载器、接口和代理实例的调用处理类的实例。
代理类的代码如下:
public class PDFProxy { public static Object getProxy(final Object obj){ return Proxy.newProxyInstance(obj.getClass().getClassLoader() , obj.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { method.invoke(obj, args); return null; } }); } }
同时代理模式再之前的博文中有所涉及,可以参考博文: Hibernate与代理模式
"围观"设计模式(12)--结构型之代理模式(Proxy Pattern)
标签:
原文地址:http://blog.csdn.net/wangyang1354/article/details/51438301