回答
我听过的设计模式和'幽灵'的唯一参考文献是Lazy-Loading。
由于延迟加载仅涉及加载时,它的实际需要,你可以把它看成是一个“鬼”在那之前的对象。你可以看到它的轮廓,但是在加载之前不能真正使用它。
是的,我正在阅读,但它并没有对我有很大的意义 – 2010-06-09 18:01:33
@大卫:是的,从什么时候有人触摸他们的时候鬼物体实现? – intuited 2010-06-09 19:37:56
这不是在GOF也不福勒POEAA,我可以把它作为类似其代理的延迟加载的时候,唯一的事情。
这将是有道理的 – 2010-06-09 18:08:25
幽灵在PoEAA第202,206-14页提到。鬼是一个懒惰的加载对象,只包含足够的信息来按需要实例化自己。它们可能很有用,因为如果它们使用加载程序注册自己,它们可以在第一次访问时触发大量类似的重影(不知道如果Fowler提到那一点)。
我刚刚创建了一个,然后在询问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);
}
}
当你初始化这个便宜类,没有什么是内创建。这是当你实际调用一个方法时,“原始”对象被创建,如果没有,并从中检索数据。如果你不打算使用它,它会使你不初始化原始,如果它是一个昂贵的操作。
- 1. 设计模式 - 这是什么模式?
- 2. 这是什么样的设计模式?
- 3. 什么是“调度员”设计模式?
- 4. 这是什么JS设计模式?
- 5. 这是什么设计模式?
- 6. 什么是非锁定设计模式?
- 7. 这是什么设计模式?
- 8. 什么是动作设计模式?
- 9. 什么是设计模式标题?
- 10. 什么是门面设计模式?
- 11. 这是什么设计模式?
- 12. 什么是四人帮设计模式
- 13. .net中的设计模式是什么?
- 14. 是什么意识到设计模式?
- 15. 这是什么设计模式?
- 16. Opengl TRIANGLE_STRIPS创建重复的鬼魂
- 17. RVM的鬼魂纠缠着我
- 18. 在Discord中踢“鬼魂”的用户
- 19. 基准测试Node.js与JMeter的鬼魂
- 20. Redis扫描的奇怪鬼魂
- 21. 什么是鬼页面?
- 22. 为什么这个警报框不会被触发?在这里追逐鬼魂?
- 23. WordPress的模块/插件管理的设计模式是什么?
- 24. 什么是Active Record - 设计模式或模块?
- 25. 开放式购物车中的mvcl设计模式是什么?
- 26. 格式化数字的最佳设计模式是什么?
- 27. “monkeypatching”背后的正式设计模式是什么?
- 28. 什么是使用Selenium PageObject设计模式的最佳方式
- 29. 什么是实现Viewholder设计模式的最佳方式。
- 30. Codeigniter使用什么设计模式?
*糟糕的笑话,我可以做... * – 2010-06-09 18:04:11
在架构采访我常常问人,“所以,你能告诉我有关LeftHandedSpinWidget设计模式吗?”看着他们在混乱中搏斗。没有LeftHandedSpinWidget设计模式。 – 2010-06-09 18:05:28
@Swingline这太残酷了。尽管Ghost是一个真正的模式。 – 2010-06-09 18:07:16