Cuando tenemos un algoritmo que por algún motivo puede llegar a cambiar en tiempo de ejecución o bien su implementación podemos trabajar con el patrón de estrategia para que éste decida que camino tomar.
Básicamente consiste en definir una interfase con los métodos del algoritmo para luego plantear cada uno de éstos en las clases que implementen la interfase.
Cada algoritmo estará encapsulado y será intercambiable independientemente de los clientes que lo utilicen.
Veamos el siguiente ejemplo, tenemos un array con el nombre de un producto y el precio. Para algunos clientes es conveniente mostrarlos en orden alfabética y en otros en orden ascendente de precio.
<?php interface estrategia{ public function ordenar($productos); } class OrdenarPorNombre implements estrategia{ public function ordenar($productos){ ksort($productos); return $productos; } } class OrdenarPorPrecio implements estrategia{ public function ordenar($productos){ asort($productos); return $productos; } } class usuarios { private $productos; public function getProductos(){ return $this->productos; } public function setProductos($productos){ $this->productos = $productos; } public function mostrar($estrategia){ print_r($estrategia->ordenar($this->getProductos())); } } $productos = array('Remera'=>20, 'Campera'=>50, 'Patalon'=>35, 'Gorro'=>10); $u = new usuarios; $u->setProductos($productos); $u->mostrar(new OrdenarPorNombre); $u->mostrar(new OrdenarPorPrecio); ?>
Resultado
Array
(
[Campera] => 50
[Gorro] => 10
[Patalon] => 35
[Remera] => 20
)
Array
(
[Gorro] => 10
[Remera] => 20
[Patalon] => 35
[Campera] => 50
)