懒惰的实例化只是代理模式的另一个名称吗?

时间:2012-01-26 14:58:42

标签: oop design-patterns

这些有什么区别?我找不到这样的“懒惰实例化”作为模式herethere,但不知怎的,我觉得懒惰的实例化只是模式的另一个术语。

4 个答案:

答案 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,您正在使用实际对象(直到第一次需要时才会创建它)。