« Patrons de conception/Commande » : différence entre les versions

Contenu supprimé Contenu ajouté
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Ligne 37 :
L'avantage de cette implémentation particulière du patron Commande est que l'interrupteur peut être utilisé avec n'importe quel périphérique, pas seulement une lampe. Dans l'exemple suivant l'interrupteur allume et éteint une lampe, mais le constructeur accepte toute classe dérivée de Command comme double paramètre. On peut, par exemple, configurer le switch pour démarrer et arrêter un moteur.
 
<sourcesyntaxhighlight lang="java">
/* Invocateur */
public class Switch
Ligne 131 :
}
}
</syntaxhighlight>
</source>
 
=== [[Programmation Perl|Perl]] ===
 
<sourcesyntaxhighlight lang="perl">
# exemple de style "switch":
Ligne 171 :
return $objectRef ? $objectRef->handleCommand($cmd, @_) : undef;
}
</syntaxhighlight>
</source>
 
Comme [[Programmation Perl|Perl]] dispose d'un ''AUTOLOAD'', le principe pourrait être émulé. Si un ''package'' voulait effectuer un ensemble de commandes arbitrairement grand, il pourrait recenser toutes les méthodes ''undefined'' grâce à ''AUTOLOAD'', puis tenter de les répartir (ce qui suppose que ''%commandHandlers'' contient une table de pointeurs, dont les clés sont les noms des méthodes):
 
<sourcesyntaxhighlight lang="perl">
sub AUTOLOAD {
my $me = shift;
Ligne 183 :
return $objectRef ? $objectRef->handleCommand($methodName, @_) : undef;
}
</syntaxhighlight>
</source>
 
Cela convertit les appels aux différentes méthodes dans l'objet courant, en appels à une méthode ''handleCommand'' dans différents objets. Cet exemple utilise Perl pour adapter un patron de conception à base d'objets Commandes, dans une interface qui en est dépourvue.