我最近一直在阅读设计模式,关于代理模式有一些我不明白的地方。
书中引用:
- 虚拟代理按需创建昂贵的对象。Motivation 中描述的 ImageProxy 就是这种代理的一个示例。
我知道这种模式可用于按需创建昂贵的对象。这个例子也很好地说明了用法。
下面是代理类的构造函数RealImage
。方法loadFromDisk()
表示昂贵的过程。
public RealImage(String fileName){
this.fileName = fileName;
loadFromDisk(fileName);
}
而示例ProxyImage
中的代理类正是它所要做的:按需创建昂贵的对象。
但我的问题是:为什么我们不能loadFromDisk()
从构造函数中删除昂贵的方法并将其放在绝对需要的地方,
像这儿?
public void display() {
if(!loaded){
loadFromDisk(fileName);
loaded = true;
}
//then display
}
那么,为什么还要费心使用代理呢?