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

Contenu supprimé Contenu ajouté
m 26 versions depuis w:Commande (patron de conception) : Patrons de conception/Commande
+
Ligne 1 :
<noinclude>{{Patrons de conception}}
En [[génie logiciel]], '''Commande''' est un [[patron de conception]] ''(design pattern)'' de type comportemental qui encapsule la notion d'''invocation''. Il permet de séparer complètement le code initiateur de l'action, du code de l'action elle-même. Ce patron de conception est souvent utilisé dans les [[Environnement graphique|GUI]]s où, par exemple, un ''item'' de menu peut être connecté à différentes Commandes de façons à ce que l'objet d'item de menu n'ait pas besoin de connaitre les détails de l'action effectuée par la Commande.
{{Patron de conception|Commande|Command|Encapsuler l'invocation d'une commande}}</noinclude>
'''Commande''' est un [[patron de conception]] de type [[../Patrons de comportement|comportemental]] qui encapsule la notion d'''invocation''.
Il permet de séparer complètement le code initiateur de l'action, du code de l'action elle-même.
Ce patron de conception est souvent utilisé dans les interfaces graphiques où, par exemple, un ''item'' de menu peut être connecté à différentes Commandes de façons à ce que l'objet d'item de menu n'ait pas besoin de connaître les détails de l'action effectuée par la Commande.
 
'''AÀ utiliser lorsque :''' il y a profilérationprolifération de méthodes similaires, et que le code de l'interface devient difficile à maintenir.
 
'''Symptômes:'''
Ligne 11 ⟶ 15 :
 
== Exemple ==
 
En [[Perl (langage)|Perl]] :
=== [[Programmation Java|Java]] ===
 
Considérons un interrupteur simple (''switch'' en anglais).
Dans cet exemple, on configure le switch avec deux commandes : une pour allumer la lumière, et une pour l'éteindre.
 
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.
 
<source lang="java">
/*the Invoker class*/
public class Switch
{
private Command flipUpCommand;
private Command flipDownCommand;
 
public Switch(Command flipUpCmd,Command flipDownCmd)
{
this.flipUpCommand=flipUpCmd;
this.flipDownCommand=flipDownCmd;
}
 
public void flipUp()
{
flipUpCommand.execute();
}
 
public void flipDown()
{
flipDownCommand.execute();
}
}
 
/*Receiver class*/
public class Light
{
public Light() { }
 
public void turnOn()
{
System.out.println("The light is on");
}
 
public void turnOff()
{
System.out.println("The light is off");
}
}
 
/*the Command interface*/
public interface Command
{
void execute();
}
 
 
/*the Command for turning on the light*/
public class TurnOnCommand implements Command
{
private Light theLight;
 
public TurnOnCommand(Light light)
{
this.theLight=light;
}
 
public void execute()
{
theLight.turnOn();
}
}
 
/*the Command for turning off the light*/
public class TurnOffCommand implements Command
{
private Light theLight;
 
public TurnOffCommand(Light light)
{
this.theLight=light;
}
 
public void execute()
{
theLight.turnOff();
}
}
 
/*The test class*/
public class TestCommand
{
public static void main(String[] args)
{
Light lamp = new Light();
Command switchUp=new TurnOnCommand(lamp );
Command switchDown=new TurnOffCommand(lamp );
 
Switch s=new Switch(switchUp,switchDown);
 
s.flipUp();
s.flipDown();
}
}
</source>
 
=== [[Programmation Perl|Perl]] ===
 
<source lang="perl">
Ligne 63 ⟶ 171 :
</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 (langage)|Perl]] pour adapter un patron de conception à base d'objets Commandes, dans une interface qui en est dépourvue.
 
[[Catégorie:Patron de conception]]
 
[[bg:Команда (шаблон)]]
[[de:Kommando (Entwurfsmuster)]]
[[en:Command pattern]]
[[es:Command (patrón de diseño)]]
[[it:Command pattern]]
[[ja:Command パターン]]
[[ko:Command 패턴]]
[[pl:Polecenie (wzorzec projektowy)]]
[[ru:Command]]
[[uk:Команда (шаблон проектування)]]
[[zh:命令模式]]