Language agnostic 什么是鬼魂设计模式?

Language agnostic 什么是鬼魂设计模式?,language-agnostic,design-patterns,Language Agnostic,Design Patterns,最近有人问了一个关于Ghost设计模式的问题——我以前从未见过这个问题 什么是Ghost设计模式?它是如何实现的?我只能在网上找到一些关于它的片段。我所听过的关于设计模式和“幽灵”的唯一参考是在 由于延迟加载只涉及在实际需要时加载对象,因此在此之前,您可以将其视为“幽灵”。你可以看到它的轮廓,但在加载之前不能真正使用它。它不在GOF或Fowler PoEAA中,我唯一能想到的是它类似于延迟加载的代理。PoEAA,202页,206-14页中提到了鬼魂。ghost是一个延迟加载的对象,它只包含足够的

最近有人问了一个关于Ghost设计模式的问题——我以前从未见过这个问题


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

我所听过的关于设计模式和“幽灵”的唯一参考是在


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

它不在GOF或Fowler PoEAA中,我唯一能想到的是它类似于延迟加载的代理。

PoEAA,202页,206-14页中提到了鬼魂。ghost是一个延迟加载的对象,它只包含足够的信息来按需实例化自己。它们可能很有用,因为如果它们在第一次访问时向加载程序注册,它们可以触发大量类似的重影(如果Fowler提到这一点,则不知道)。实际上,我刚刚创建了一个重影,然后在询问后意识到这是一个重影模式。按照原始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 );
    }
  }

当您初始化这个廉价类时,它内部不会创建任何东西。当您实际调用一个方法时,“原始”对象就会被创建(如果没有),并从中检索数据。如果您不打算使用它,它可以让您不初始化Original,前提是这是一个昂贵的操作。

在架构访谈中,我曾经问人们,“那么,您能告诉我一些关于LeftHandedSpinWidget设计模式的信息吗?”并看着他们与困惑搏斗。没有左撇子PinWidget设计模式。@Swingline太残忍了。虽然Ghost是一个真正的模式,但谈论一个不存在的模式真的很难过,我的意思是,几乎所有人都同意“Ghost模式”指的是代理或延迟加载,但不是100%确定。GoF说:模式的名称简洁地传达了模式的本质。一个好的名字是至关重要的,因为它将成为你设计词汇的一部分。