说明:
虚代理是一种节省内存的技术,以便确保对象只有在被调用到的时候才得到创建,尤其是这样的对象创建需要大量的内存消耗或者其他资源
优点:
程序启动快,应为在启动时不需要创建或者加载所有的应用对象。
缺点:
应为无法确认一个对象是否已经创建。每次访问它的时候都要先检查来确保它已经非空(即已经创建)
实例:
假设读者为java语言开发一个IDE来实现编译,执行和javadoc文档生成的工作。在大部分情况下,当Java程序被创建或修改时,它会被编译和执行,但不是
每个java程序都需要生成文档。
代码:
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();
}
}
class Compiler {
public void compile(String javaFile) {
//
}
}
class Runtime {
public void run(String classFile) {
//
}
}
public class RealProcessor extends IDEOperation {
JavaDoc jdoc;
public RealProcessor() {
super();
jdoc = new JavaDoc();
}
public void generateDocs(String javaFile) {
jdoc.generateDocs(javaFile);
}
}
class JavaDoc {
public void generateDocs(String javaFile) {
//
}
}
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);
}
}