答案 0 :(得分:2)
不,虽然您可以在代理中使用延迟实例化,但它们并不是真正相关的概念。
懒惰实例化
getBar() {
if (bar == null)
bar = new Foo();
return bar;
}
<强>代理强>
getBar() {
return realObject.getBar();
}
具有延迟实例化的代理
getBar() {
if (realObject == null)
realObject = new Foo();
return realObject.getBar();
}
答案 1 :(得分:1)
不,他们不是一回事。简而言之:
延迟初始化是指在创建之前等到需要的时候。
代理模式是您控制对基础对象的访问。代理模式可能会使用延迟初始化来创建它代理的东西,但您不必这样做。
例如,在我的javascript代码中,我有类似
的内容if (!this._pane ) this._pane = ... // create pane lazily
// now use pane
创建一个窗格,我将仅在需要时显示该窗格。这样做的好处是可以避免在用户到达之前创建窗格的成本(他们甚至可能不会这样做。)这是懒惰的初始化。
代理模式可能使用延迟初始化,但它不是另一个术语。
答案 2 :(得分:1)
不,懒惰初始化不是代理的另一个术语。您可以使用代理来实现延迟初始化,但并非所有代理都是惰性初始化。
答案 3 :(得分:0)
不,使用代理你正在使用中间件,并且真的不知道它在幕后做了什么。使用lazy init,您正在使用实际对象(直到第一次需要时才会创建它)。