知识大全 虚拟代理模式(Virtual Proxy)(图)

Posted 客户

篇首语:勤劳一日,可得一夜安眠;勤劳一生,可得幸福长眠。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 虚拟代理模式(Virtual Proxy)(图)相关的知识,希望对你有一定的参考价值。

虚拟代理模式(Virtual Proxy)(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  虚拟代理模式(Virtual Proxy)是一种节省内存的技术 它建议创建那些占用大量内存或处理复杂的对象时 把创建这类对象推迟到使用它的时候 在特定的应用中 不同部分的功能由不同的对象组成 应用启动的时候 不会立即使用所有的对象 在这种情况下 虚拟代理模式建议推迟对象的创建直到应用程序需要它为止 对象被应用第一次引用时创建并且同一个实例可以被重用 这种方法优缺点并存      优点     这种方法的优点是 在应用程序启动时 由于不需要创建和装载所有的对象 因此加速了应用程序的启动      缺点:    因为不能保证特定的应用程序对象被创建 在访问这个对象的任何地方 都需要检测确认它不是空(null) 也就是 这种检测的时间消耗是最大的缺点     应用虚拟代理模式 需要设计一个与真实对象具有相同接口的单独对象(指虚拟代理) 不同的客户对象可以在创建和使用真实对象地方用相应的虚拟对象来代替 虚拟对象把真实对象的引用作为它的实例变量维护 代理对象不要自动创建真实对象 当客户需要真实对象的服务时 调用虚拟代理对象上的方法 并且检测真实对象是否被创建     如果真实对象已经创建 代理把调用转发给真实对象     如果真实对象没有被创建      )代理对象创建真实对象     )代理对象把这个对象分配给引用变量      )代理把调用转发给真实对象    按照这种安排 验证对象存在和转发方法调用这些细节对于客户是不可见的 客户对象就像和真实对象一样与代理对象进行交互 因此客户从检测真实对象是否为null中解脱出来 另外 由于创建代理对象在时间和处理复杂度上要少于创建真实对象 因此 在应用程序启动的时候 用代理对象代替真实对象初始化      例子     假设我们建立一个JAVA程序的集成开发环境(Integrated Development Environment) 这个环境包括三个功能 编译 运行 生成JavaDoc文档 在新建和编辑Java程序时 最为常用的是编译和运行 至于生成JavaDoc文档对于每一个Java程序不是必需的 因此 在Java开发环境启动时 不要创建和装载实现集成开发环境全部功能的所有对象 仅创建那些在编辑 编译 运行时用到的对象 保留提供生成JavaDoc文档的对象 这是一个好的设计思想 这种对象创建策略能够高效地利用内存空间并且加快了集成开发环境的启动速度     假设编译 运行 生成JavaDoc文档这些功能分别由三个工具类提供??Compiler Runtime和JavaDoc 客户对象可以访问的不同IDE操作的接口以抽象类IDEOperation的形式定义     public abstract class IDEOperation   private Compiler cmp;  private Runtime rtime;  public void pile(String javaFile)   pile(javaFile);    public void run(String classFile)   rtime run (classFile);    //to be delayed until needed   public abstract void generateDocs(String javaFile);  public IDEOperation()   cmp = new Compiler();  rtime = new Runtime();        类IDEOperation提供了编译 运行java程序方法的实现 作为它构造函数的一部分 IDEOperation创建和装载了进行编译和执行操作的Compiler和Runtime对象 生成JavaDoc文档的方法generateDocs方法被设计成抽象的方法 由它的子类来实现     让我们定义抽象类IDEOperation的一个具体子类RealProcessor 作为RealProcessor构造函数的一部分 创建JavaDoc对象来提供生成JavaDoc文档的服务 通过使用JavaDoc对象功能实现generateDocs方法     public class RealProcessor extends IDEOperation   JavaDoc jdoc;  public RealProcessor()   super();  jdoc = new JavaDoc();    public void generateDocs(String javaFile)   jdoc generateDocs(javaFile);        通过上面的实现 RealProcessor类包含了编译 运行和生成JavaDoc文档的所有功能 像我们原来讨论的 生成JavaDoc文档的功能不是每一个Java程序所必须的 当RealProcessor实例化的时候 包括负责生成JavaDoc文档的JavaDoc对象的一系列对象被创建 推迟创建JavaDoc对象有以下优点      )加速了RealProcessor对象的创建时间 因为它的构造函数创建的很少的对象      )高效地利用内存 因为在不需要对象服务的时候 不需要把对象保持在内存中     在不改变RealProcessor实现的前提下 可以通过定义IDEOperation的另外一个子类ProxyProcessor来实现虚拟代理 因为RealProcessor和ProxyProcessor共享相同的接口 客户对象可以用ProxyProcessor代替RealProcessor 图 展示了类层次    >    public class ProxyProcessor extends IDEOperation   private RealProcessor realProcessor;  public void generateDocs(String javaFile)   /*  In order to generate javadocs  the proxy loads the actual object and  invokes its methods   */  if (realProcessor == null)   realProcessor = new RealProcessor();    realProcessor generateDocs(javaFile);        作为自己的实例变量 ProxyProcessor维护了RealProcessor对象的一个引用 作为generateDocs方法的一部分 ProxyProcessor检测引用变量是否被初始化为RealProcessor对象 如果没有被初始化 它创建一个RealProcessor对象并把这个对象分配给它的实例变量 一旦RealProcessor对象已经被创建 就调用其上的generateDocs方法     实际上 也就是当客户对象第一次请求产生javadoc文档时 RealProcessor才被初始化装入内存中 反过来 直到客户需要为Java程序生成javadocs时 JavaDoc对象才会被创建和装入内存中     客户对象像调用真实处理对象一样调用ProxyProcessor上的方法 并不需要关心(知道)RealProcessor对象是否存在 至于验证 检测和ProxyProcessor和RealProcessor之间的交互 这样的细节对于客户对象是透明的     public class Client   public static void main(String[] args)   /*  At this point objects required for  the pile and run operations are  created but not the objects that provide the  generate Javadoc functionality   */  IDEOperation IDE = new ProxyProcessor();  pile( test java );  IDE run( test class );  /*  The Javadoc functionality is accessed  For the first time and hence the  Object offering the Javadoc generation  Functionality is loaded at this point   */  IDE generateDocs( test java );     cha138/Article/program/Java/gj/201311/27581

相关参考

知识大全 介绍一下代理模式(Proxy)

介绍一下代理模式(Proxy)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!当我们需要使用的对象很

知识大全 java动态代理Dynamic Proxy

java动态代理DynamicProxy  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  被代理对

知识大全 Java设计模式之Proxy模式

Java设计模式之Proxy模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  为什么要使用Pr

知识大全 在线旅行社或虚拟旅行代理能给顾客提供一些什么样的特别服务

在线旅行社或虚拟旅行代理能给顾客提供一些什么样的特别服务旅行社产品是旅行社根据市场需求,通过采购并整合景点、交通、住宿、餐饮、购物、娱乐等单项服务产品,并将自己的服务贯穿于其中的、向旅游者提供在旅游活

知识大全 代理模式

 在上一篇你会在C#的类库中添加webservice吗?我谈到了webservice的应用本人一直学习设计模式而webservice就是代理模式的一种特别经典的应用  名词解释 &

知识大全 Java设计模式之计数代理模式

Java设计模式之计数代理模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  描述    计数代

知识大全 精解Java中代理模式的实现

精解Java中代理模式的实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  简介摘要代理模式是G

知识大全 VIRTUAL

vsftpd-1.1.3配制实例之四:VIRTUAL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 Java程序性能优化-代理模式(7)

Java程序性能优化-代理模式(7)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(1)

Java程序性能优化-代理模式(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!