Что такое Ghost Design Pattern?
Кто-то недавно задал вопрос о Ghost Design Pattern - я раньше такого не видел.
Что такое Ghost Design Pattern и как он реализован? Я могу найти только фрагменты в Интернете в отношении этого.
4 ответа
Единственная ссылка, которую я когда-либо слышал о Design Pattern и "Ghost", - это " Ленивая загрузка".
Поскольку отложенная загрузка включает в себя загрузку объекта только тогда, когда он действительно необходим, до тех пор вы можете думать о нем как о "Призраке". Вы можете видеть его схему, но не можете использовать его, пока он не загружен.
Призраки упоминаются в PoEAA, стр. 202, 206-14. Призрак - это ленивый загруженный объект, который содержит достаточно информации для создания своего экземпляра по требованию. Они могут быть полезны, потому что они могут вызвать массовую загрузку похожих призраков при первом доступе, если они регистрируют себя в загрузчике (не знаю, хотя Фаулер упоминает этот бит).
Его нет ни в GOF, ни в Fowler PoEAA, единственное, что я могу думать о нем как о чем-то похожем, это Proxy для отложенной загрузки.
Я на самом деле только что создал один, а затем понял, что это шаблон Ghost после того, как задал вопрос здесь, в SO. Перейдите по этой ссылке для оригинального кода 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 );
}
}
Когда вы инициализируете этот дешевый класс, внутри него ничего не создается. Когда вы на самом деле вызываете метод, создается "оригинальный" объект, если такового не было, и данные извлекаются из него. Это заставляет вас не инициализировать оригинал, если вы не собираетесь его использовать, при условии, что это дорогостоящая операция.