Le design pattern stratégie

Choisir dynamiquement quel algorithme exécuter

10 juin 2014

Le design pattern stratégie (strategy en anglais) permet de choisir dynamiquement un algorithme à exécuter en fonction d'une situation.

Prenons l'exemple d'un web-service qui doit retourner une réponse formatée dans différents formats : xml, json etc...

Choisir le format de retour d'un webservice

abstract class RenderStrategy
{
        abstract public function format($toFormat);
}

class JsonRenderStrategy extends RenderStrategy
{
        public function format($toFormat)
        {
                return json_encode($toFormat);
        }
}

class XmlRenderStrategy extends RenderStrategy
{
        public function format($toFormat)
        {
                $xml = new SimpleXMLElement('<root/>');

                array_walk_recursive($toFormat, function($item, $key) use($xml){
                        $xml->addChild($key, $item);
                });

                return $xml->asXML();
        }
}

class Response
{
        protected $renderStrategy = null;

        public function setRenderStrategy(RenderStrategy $renderStrategy)
        {
                $this->renderStrategy = $renderStrategy;
        }

        public function render($response)
        {
                echo $this->renderStrategy->format($response);
        }
}

$response = new Response();

$response->setRenderStrategy(new JsonRenderStrategy());
$response->render(array('description' => 'tutoriel sur le design pattern strategy'));

/* Sortie :
 * {"description":"tutoriel sur le design pattern strategy"}
*/



$response->setRenderStrategy(new XmlRenderStrategy());
$response->render(array('description' => 'tutoriel sur le design pattern strategy'));

/* Sortie :
 * <root><description>tutoriel sur le design pattern strategy</description></root>
*/

A bientôt !

Par
Créateur et administrateur.

Dans la même catégorie

Le design pattern chaîne de responsabilité
Le design pattern décorateur
Le design pattern Adapter
Comment générer du code à partir d'un diagramme UML ?
Le design pattern Visiteur
Le design pattern Singleton
L'injection de dépendances
Le polymorphisme
Le design pattern Double dispatch
Fabrique : un design pattern qui construit vos objets

Commentaire(s)