Logo Studenta

Qué es el patrón de diseño Proxy y cuándo se utiliza en PHP

¡Estudia con miles de materiales!

Vista previa del material en texto

¿Qué es el patrón de diseño Proxy y cuándo se utiliza en PHP? 
 
El patrón de diseño "Proxy" (Proxy o Sustituto) es un patrón de diseño estructural que se utiliza para 
proporcionar un objeto de sustitución o representante para otro objeto. El objetivo del patrón Proxy 
es controlar el acceso al objeto original y agregar funcionalidades adicionales, como la verificación 
de permisos, la caché, la carga perezosa (lazy loading) o la contabilización de llamadas. 
 
El patrón Proxy es útil en situaciones en las que deseas agregar una capa adicional de control o 
funcionalidad a un objeto sin cambiar su comportamiento original. Esto te permite tener un mayor 
control sobre el acceso y la manipulación del objeto, especialmente en escenarios en los que el 
objeto original puede ser costoso de crear o cargar. 
 
En PHP, el patrón Proxy se utiliza en varias situaciones, entre ellas: 
 
1. Proxy Remoto: 
 Cuando deseas trabajar con objetos que residen en un servidor remoto o en otro contexto 
inaccesible directamente. El proxy actúa como una representación local del objeto remoto y 
gestiona la comunicación entre el cliente y el servidor. 
 
2. Proxy Virtual o Lazy Loading: 
 Cuando deseas cargar objetos de manera perezosa (lazy loading) para evitar la carga innecesaria de 
recursos. El proxy puede retrasar la creación o carga del objeto hasta que realmente se necesite. 
 
3. Proxy de Seguridad o Control de Acceso: 
 Cuando deseas controlar el acceso a un objeto restringiendo ciertas operaciones o verificando 
permisos antes de permitir que el objeto real las ejecute. 
 
A continuación, se muestra un ejemplo sencillo de cómo se implementa el patrón Proxy en PHP: 
 
```php 
// Componente: Interfaz común para el objeto real y el proxy 
interface Image 
{ 
 public function display(); 
} 
 
// Objeto real: Representa una imagen pesada 
class RealImage implements Image 
{ 
 private $filename; 
 
 public function __construct($filename) 
 { 
 $this->filename = $filename; 
 // Carga costosa de la imagen desde el disco o una fuente externa 
 $this->loadImageFromDisk(); 
 } 
 
 public function display() 
 { 
 echo "Displaying image: " . $this->filename . PHP_EOL; 
 } 
 
 private function loadImageFromDisk() 
 { 
 // Simulación de carga costosa desde el disco 
 echo "Loading image from disk: " . $this->filename . PHP_EOL; 
 } 
} 
 
// Proxy: Representante del objeto real con funcionalidades adicionales 
class ProxyImage implements Image 
{ 
 private $filename; 
 private $realImage; 
 
 public function __construct($filename) 
 { 
 $this->filename = $filename; 
 } 
 
 public function display() 
 { 
 if ($this->realImage === null) { 
 $this->realImage = new RealImage($this->filename); 
 } 
 $this->realImage->display(); 
 } 
} 
``` 
 
En este ejemplo, `Image` es la interfaz común para el objeto real `RealImage` y el proxy 
`ProxyImage`. El proxy `ProxyImage` se encarga de retrasar la creación y carga de `RealImage` hasta 
que realmente se necesite, lo que ahorra recursos si el objeto real es costoso de crear. Además, el 
proxy permite agregar funcionalidades adicionales antes o después de mostrar la imagen real, como 
el control de acceso o la verificación de permisos. 
 
El patrón Proxy es útil para encapsular la complejidad y agregar funcionalidades adicionales a 
objetos existentes sin modificar su comportamiento original. Esto mejora la flexibilidad, el 
rendimiento y la seguridad en diversas situaciones de diseño y programación.

Continuar navegando