什么是幽灵设计模式?

时间:2010-06-09 17:58:02

标签: language-agnostic design-patterns

有人最近问了一个关于Ghost设计模式的问题 - 我以前没见过。

什么是Ghost设计模式以及如何实现?我只能在网上找到它的片段。

4 个答案:

答案 0 :(得分:21)

我听过设计模式和'Ghost'的唯一参考是Lazy-Loading

由于延迟加载仅涉及在实际需要时加载对象,因此在此之前您可以将其视为“Ghost”。你可以看到它的轮廓,但在它加载之前不能真正使用它。

答案 1 :(得分:4)

PoEAA中提到了幽灵,第202,206-14页。 ghost是一个延迟加载的对象,它包含足够的信息以按需实例化自身。它们非常有用,因为如果它们使用加载器注册自己,它们可以在第一次访问时触发类似重影的大量加载(如果Fowler提到那个位,则不知道)。

答案 2 :(得分:3)

它不在GOF和Fowler PoEAA中,我唯一可以认为它类似于它的延迟加载代理。

答案 3 :(得分:0)

我实际上刚刚创建了一个,然后在询问a question here in SO之后意识到它是一个Ghost模式。请关注原始PHP代码的链接,这是伪代码版本:

// A "cheap" class
class Namespace_Original
  {
  // The expensive, uninitialised object
  private Original

  // The "cheap" data needed to initialize Original
  private Data

  // Constructor for the cheap class
  public Namespace_Original(Data)
    {
    this.Data = Data
    }

  // Whenever you call a method of Original
  public __call(method_name, method_data)
    {
    // Create the expensive object only the first time it's going to be used
    if (empty(this.Original))
      this.Original = new Original(this.Data);

    // Call the Original's method with it's arguments
    this.Original.name( method_data );
    }
  }

初始化此 cheap 类时,其中不会创建任何内容。当你实际调用一个创建“原始”对象的方法时,如果没有,则从中检索数据。如果您不打算使用它,则不会初始化原始,因为这是一项昂贵的操作。