Définir une famille d'algorithmes, les encapsuler individuellement et de les rendre interchangeables. Strategy permet à l'algorithme de varier indépendamment des clients qui l'utilisent.
Le choix me semble tout à fait approprié, n'est-ce pas ?
D'abord, il doit faire les choses proprement en respectant le code de son père Harry. C'est pourquoi on définira une interface que toutes les stratégies devront suivre.
interface KillInterface{
public function kill($person);
}
Ensuite, parce que le protagoniste a plus d'un tour dans son sac, il a paufiné plusieurs stratégies pour arriver à ses fins. class StabThroughHeart implements KillInterface{
public function kill($person){
echo $person->getName() . ' has been killed by a stab through heart';
}
}
class SliceThroat implements KillInterface{
public function kill($person){
echo $person->getName() . ' has been killed by a sliced throat';
}
}
class Strangulation implements KillInterface{
public function kill($person){
echo $person->getName() . ' has been killed by strangulation';
}
}
Dexter laisse un peu de place à l'improvisation lorsque vient le temps d'agir. Mais il sait qu'il devra réfléchir vite et choisir une stratégie selon le contexte.class KillStrategy{
private $strategy = null;
public function __construct($type){
switch($type){
case 'stabThroughHeart' :
$this->strategy = new StabThroughHeart();
break;
case 'sliceThroat' :
$this->strategy = new SliceThroat();
break;
case 'strangulation' :
$this->strategy = new Strangulation();
break;
}
}
public function kill($person){
return $this->strategy->kill($person);
}
}
J'allais oublier les victimes! Ici, on n'a pas besoin d'en savoir plus que leur nom.class Victim{
private $_name;
public function __construct($name){
$this->_name = $name;
}
public function getName(){
return $this->_name;
}
}
Enfin, le justicier passe à l'action en sélectionnant minutieusement des méchants antagonistes.$strategy = new KillStrategy('sliceThroat');
$strategy->kill( new Victim('Ice Truck Killer') );
$strategy = new KillStrategy('stabThroughHeart');
$strategy->kill( new Victim('Lila West') );
$strategy = new KillStrategy('strangulation');
$strategy->kill( new Victim('Miguel Prado') );
C'est tout pour ce soir. J'ai encore deux saisons à regarder. Bonne soirée!À lire aussi : design pattern Observer appliqué au hockey.
Aucun commentaire:
Publier un commentaire