El patrón de estrategia en PHP

El patrón de estrategia es útil cuando tenemos múltiples fragmentos de código que realizan operaciones similares. Define una familia de algoritmos encapsulados e intercambiables. Imagine un proceso de pago de pedidos en el que queremos implementar diferentes proveedores de envío, como UPS y FedEx.

El siguiente ejemplo demuestra una posible implementación del patrón de estrategia:

<?php
interface ShipmentStrategy
{
public function calculate($amount);
}
class UPSShipment implements ShipmentStrategy
{
public function calculate($amount)
{
return 'UPSShipment…';
}
}
class FedExShipment implements ShipmentStrategy
{
public function calculate($amount)
{
return 'FedExShipment…';
}
}
class Checkout
{
private $amount = 0;
public function __construct($amount = 0)
{
$this->amount = $amount;
}
public function estimateShipment()
{
if ($this->amount > 199.99) {
$shipment = new FedExShipment();
} else {
$shipment = new UPSShipment();
}
return $shipment->calculate($this->amount);
}
}
// Client use
$checkout = new Checkout(19.99);
echo $checkout->estimateShipment(); // UPSShipment…
$checkout = new Checkout(499.99);
echo $checkout->estimateShipment(); // FedExShipment…

Comenzamos definiendo una interfaz ShipmentStrategy con un método Calculate().
Luego definimos las clases UPSShipment y FedExShipment que implementan la interfaz ShipmentStrategy. Con estas dos clases de envío concretas, creamos una clase Checkout que encapsula las dos opciones de envío en su método estimateShipment(). Luego, el cliente llama al método estimateShipment() en la instancia de Checkout. Dependiendo de la cantidad transferida, se inicia un cálculo de envío diferente. Con este patrón, podemos agregar nuevos cálculos de envío sin cambiar el cliente.

Comparte