El patrón strategy es un patrón de diseño de comportamiento que convierte un grupo de comportamientos en objetos y los hace intercambiables dentro del objeto de contexto original. Esa decir supongamos que necesitamos hacer varias acciones en diferentes sitios, por ejemplo publicar en diferentes redes sociales u obtener información por ejemplo, bolsa y cambio de divisas. Con el patrón strategy nos permite hacer todo más fácil. Veamos une ejemplo de patrón strategy en php:
interface publishOnSocialNetwork { public function publish(string $post): bool; } class facebook implements publishOnSocialNetwork { public function publishPost(string $post): bool; { //facebookObject: Supuesto objeto de facebook con nuestros credenciales para publicar post, subir fotos, etc.. //publish: Supuesto método para publicar un post en facebook return $facebookObject->publish($post); } } class twitter implements publishOnSocialNetwork { public function publishPost(string $post): bool; { //twitterObject: Supuesto objeto de facebook con nuestros credenciales para publicar post, subir fotos, etc.. //publish: Supuesto método para publicar un post en facebook return $twitterObject->publish($post); } } class SocialNetwork { private $socialNetwork; public function __construct(publishOnSocialNetwork $socialNetwork) { $this->socialNetwork= $socialNetWotk; } public function setSocialNetwork(publishOnSocialNetWork $socialNetwork) { $this->socialNetwork= $socialNetwork; } public function publish($text): void { // ... $result = $this->strategy->publishPost($text); // ... } } $socialNetwork = new SocialNetwork(new facebook ()); $socialNetwork->publish('Publicando en Facebook'); $socialNetwork->setStrategy(new twitter()); $socialNetwork->publish('Publicando en twitter');
En el ejemplo anterior tenemos un interfaz para implementar tantas clases como redes sociales queramamos publicar, en este caso twitter y facebook y luego con la clase SocialNetwork se le pasa cada clase de cada red social para que publique en cada una de ellas.
Os invito a leer sobre Patrones de diseño en php.