网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.关于Java23种设计模式的有趣见解.
.为什么要学习Java,成为Java程序.
.Eclipse 走上榜首 照亮Java众生.
.Java平台上的CRM系统.
.用Java实现HTTP文件队列下载.
.JAVA网络编程基础.
.用Java访问XML数据的简单起步.
.精通Hibernate之映射继承关系四(.
.java性能优化-之二.
.WebWork2与SpringFramework集成之.
.高级技术分析:绿色和本地线程简单.
.tomcat的sql server数据源的配置.
.JMS 1.1 通过统一的域简化了消息.
.JAVA反射技术(二).
.在Java程序中截获控制台输出.
.规则与自由:为何选择CORBA和Java.
.对Java多线程的一些总结.
.用Java小程序为网页上的照片添加.
.WebWork的强大的验证器.
.Struts开发指南之J2EE n层结构.

Java设计模式之虚拟代理模式

发表日期:2008-1-5



  优点:

  这种方法的优点是,在应用程序启动时,由于不需要创建和装载所有的对象,因此加速了应用程序的启动。

  缺点:

  因为不能保证特定的应用程序对象被创建,在访问这个对象的任何地方,都需要检测确认它不是空(null)。也就是,这种检测的时间消耗是最大的缺点。

  应用虚拟代理模式,需要设计一个与真实对象具有相同接口的单独对象(指虚拟代理)。不同的客户对象可以在创建和使用真实对象地方用相应的虚拟对象来代替。虚拟对象把真实对象的引用作为它的实例变量维护。代理对象不要自动创建真实对象,当客户需要真实对象的服务时,调用虚拟代理对象上的方法,并且检测真实对象是否被创建。

  假如真实对象已经创建,代理把调用转发给真实对象,假如真实对象没有被创建:

  1) 代理对象创建真实对象

  2) 代理对象把这个对象分配给引用变量。

  3) 代理把调用转发给真实对象

  按照这种安排,验证对象存在和转发方法调用这些细节对于客户是不可见的。客户对象就像和真实对象一样与代理对象进行交互。因此客户从检测真实对象是否为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 compile(String javaFile) {
  cmp.compile(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对象有以下优点:

  1) 加速了RealProcessor对象的创建时间,因为它的构造函数创建的很少的对象。

  2) 高效地利用内存,因为在不需要对象服务的时候,不需要把对象保持在内存中。

  在不改变RealProcessor实现的前提下,可以通过定义IDEOperation的另外一个子类ProxyProcessor来实现虚拟代理。因为RealProcessor和ProxyProcessor共享相同的接口,客户对象可以用ProxyProcessor代替RealProcessor。图25.1展示了类层次;


上一篇:在J2ME程序中实现字符串分割 人气:625
下一篇:J2EE相关设计模式讨论 人气:463
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐