De hecho, acabo de crear uno y luego me di cuenta de que era un patrón Fantasma después de preguntar a question here in SO. Siga ese enlace para el código PHP original, aquí está una versión pseudo-código:
// 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);
}
}
Al inicializar esta clase barato, nada se crea en su interior. Es cuando realmente llama a un método que el objeto "Original" se crea, si no había ninguno, y los datos se recuperan de eso. No debe inicializar Original si no va a utilizarlo, siempre que sea una operación costosa.
* Las malas bromas que podría hacer ... * –
Durante las entrevistas de arquitectura solía preguntarle a la gente, "entonces, ¿puede decirme algo sobre el patrón de diseño LeftHandedSpinWidget?" y mira cómo luchan con la confusión. No hay un patrón de diseño LeftHandedSpinWidget. –
@Swingline Eso es cruel. Sin embargo, el fantasma es un patrón genuino. –