El patrón de inicialización perezosa en PHP

El patrón de inicialización perezosa es útil para abordar objetos cuya instanciación probablemente requiera muchos recursos. La idea es retrasar la operación real de recursos intensos hasta que su resultado sea realmente requerido. La generación de PDF es un ejemplo de una operación de uso de recursos ligero a moderado.

El siguiente ejemplo demuestra una posible implementación de patrón de inicialización perezosa basada en la generación de PDF:

<?php
interface PdfInterface
{
public function generate();
}
class Pdf implements PdfInterface
{
private $data;
public function __construct($data)
{
$this->data = $data;
// Imagine resource intensive pdf generation here
sleep(3);
}
public function generate()
{
echo ‘pdf: ‘ . $this->data;
}
}
class ProxyPdf implements PdfInterface
{
private $pdf = null;
private $data;
public function __construct($data)
{
$this->data = $data;
}
public function generate()
{
if (is_null($this->pdf)) {
$this->pdf = new Pdf($this->data);
}
$this->pdf->generate();
}
}
// Client
$pdf = new Pdf(‘<h1>Hello</h1>’); // 3 seconds
// Some other code …
$pdf->generate();
$pdf = new ProxyPdf(‘<h1>Hello</h1>’); // 0 seconds
// Some other code …
$pdf->generate();

Dependiendo de cómo se construya la clase, podría desencadenar la generación real justo después de que llamemos a la palabra clave new, como lo hemos hecho con la nueva expresión Pdf(…). La nueva expresión ProxyPdf(…) se comporta de manera diferente porque se envuelve alrededor de la clase Pdf implementando el mismo PdfInterface, pero proporcionando un método de implementación diferente __construct().

Comparte