Blog de Gonzalo

Patrón strategy en php

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.