Logo Studenta

Qué es el patrón de diseño Strategy y cómo se aplica en PHP

¡Estudia con miles de materiales!

Vista previa del material en texto

¿Qué es el patrón de diseño Strategy y cómo se aplica en PHP? 
 
El patrón de diseño Strategy es un patrón de comportamiento que permite definir una 
familia de algoritmos, encapsularlos y hacerlos intercambiables entre sí sin que el cliente 
tenga que conocer los detalles de su implementación. El patrón Strategy promueve la 
composición sobre la herencia y se basa en el principio de "Programar para una interfaz, no 
para una implementación". 
 
En el patrón Strategy, se definen varias clases que representan diferentes estrategias 
(algoritmos) y una clase de contexto que utiliza una de estas estrategias para realizar una 
tarea específica. El contexto tiene una referencia a una interfaz común que representa la 
estrategia, y la estrategia concreta se selecciona y se establece en el contexto en tiempo de 
ejecución. 
 
**Ejemplo de implementación del patrón Strategy en PHP:** 
 
Supongamos que tienes un sistema de envío de correos electrónicos y deseas utilizar 
diferentes estrategias de envío según la plataforma de envío (SMTP, API de terceros, etc.). 
Aquí tienes una implementación básica del patrón Strategy: 
 
1. **Definir la interfaz de la estrategia:** 
 
```php 
interface MailSender { 
 public function send($to, $subject, $body); 
} 
``` 
 
2. **Implementar las estrategias concretas:** 
 
```php 
class SmtpMailSender implements MailSender { 
 public function send($to, $subject, $body) { 
 // Implementación del envío de correo usando SMTP 
 // ... 
 echo "Enviado por SMTP: $subject\n"; 
 } 
} 
 
class ThirdPartyApiMailSender implements MailSender { 
 public function send($to, $subject, $body) { 
 // Implementación del envío de correo usando API de terceros 
 // ... 
 echo "Enviado por API de terceros: $subject\n"; 
 } 
} 
``` 
 
3. **Crear la clase de contexto:** 
 
```php 
class EmailService { 
 private $mailSender; 
 
 public function setMailSender(MailSender $mailSender) { 
 $this->mailSender = $mailSender; 
 } 
 
 public function sendEmail($to, $subject, $body) { 
 // Utilizar la estrategia seleccionada para enviar el correo 
 $this->mailSender->send($to, $subject, $body); 
 } 
} 
``` 
 
4. **Utilizar las diferentes estrategias en el contexto:** 
 
```php 
// Crear una instancia del contexto 
$emailService = new EmailService(); 
 
// Utilizar la estrategia de SMTP 
$emailService->setMailSender(new SmtpMailSender()); 
$emailService->sendEmail('destinatario@example.com', 'Asunto', 'Cuerpo del mensaje'); 
 
// Utilizar la estrategia de API de terceros 
$emailService->setMailSender(new ThirdPartyApiMailSender()); 
$emailService->sendEmail('destinatario@example.com', 'Asunto', 'Cuerpo del mensaje'); 
``` 
 
En este ejemplo, la clase `EmailService` actúa como el contexto y puede cambiar de 
estrategia dinámicamente. La clase `SmtpMailSender` y `ThirdPartyApiMailSender` son las 
estrategias concretas que implementan la interfaz `MailSender`. La interfaz `MailSender` 
define el contrato para todas las estrategias posibles de envío de correos. 
 
Con el patrón Strategy, puedes cambiar fácilmente la estrategia de envío de correos sin 
modificar la clase `EmailService`, lo que hace que el código sea más flexible y fácil de 
mantener. Este enfoque también promueve el principio de "separación de preocupaciones" 
al permitir que las estrategias se gestionen de manera independiente del contexto en el que 
se utilizan.

Continuar navegando