有人最近问了一个关于Ghost设计模式的问题 - 我以前没见过。
什么是Ghost设计模式以及如何实现?我只能在网上找到它的片段。
答案 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 类时,其中不会创建任何内容。当你实际调用一个创建“原始”对象的方法时,如果没有,则从中检索数据。如果您不打算使用它,则不会初始化原始,因为这是一项昂贵的操作。