Design patterns
Modèle de commande
Recherche…
Exemple de modèle de commande en Java
définition de wikipedia :
Le modèle de commande est un modèle de conception comportementale dans lequel un objet est utilisé pour encapsuler toutes les informations nécessaires pour effectuer une action ou déclencher un événement ultérieurement.
Diagramme UML de dofactory :
Composants de base et workflow:
-
Command
déclare une interface pour les commandes abstraites telles queexecute()
-
Receiver
sait comment exécuter une commande particulière -
Invoker
contientConcreteCommand
, qui doit être exécuté -
Client
créeConcreteCommand
et attribue leReceiver
-
ConcreteCommand
définit la liaison entre laCommand
et leReceiver
De cette manière, le modèle de commande dissocie Sender (Client) de Receiver via Invoker . Invoker a une connaissance complète de la commande à exécuter et la commande sait quel récepteur invoquer pour exécuter une opération particulière.
Extrait de code:
interface Command {
void execute();
}
class Receiver {
public void switchOn(){
System.out.println("Switch on from:"+this.getClass().getSimpleName());
}
}
class OnCommand implements Command{
private Receiver receiver;
public OnCommand(Receiver receiver){
this.receiver = receiver;
}
public void execute(){
receiver.switchOn();
}
}
class Invoker {
private Command command;
public Invoker(Command command){
this.command = command;
}
public void execute(){
this.command.execute();
}
}
class TV extends Receiver{
public String toString(){
return this.getClass().getSimpleName();
}
}
class DVDPlayer extends Receiver{
public String toString(){
return this.getClass().getSimpleName();
}
}
public class CommandDemoEx{
public static void main(String args[]){
// On command for TV with same invoker
Receiver receiver = new TV();
Command onCommand = new OnCommand(receiver);
Invoker invoker = new Invoker(onCommand);
invoker.execute();
// On command for DVDPlayer with same invoker
receiver = new DVDPlayer();
onCommand = new OnCommand(receiver);
invoker = new Invoker(onCommand);
invoker.execute();
}
}
sortie:
Switch on from:TV
Switch on from:DVDPlayer
Explication:
Dans cet exemple,
- L' interface de commande définit la méthode
execute()
. - OnCommand est ConcreteCommand , qui implémente la méthode
execute()
. - Receiver est la classe de base.
- TV et DVDPlayer sont deux types de récepteurs , qui sont transmis à ConcreteCommand comme OnCommand.
- Invoker contient la commande . C'est la clé pour séparer l'expéditeur du récepteur .
- Invoker reçoit OnCommand -> qui appelle Receiver (TV) pour exécuter cette commande.
En utilisant Invoker, vous pouvez activer TV et DVDPlayer. Si vous prolongez ce programme, vous désactivez également TV et DVDPlayer.
Principaux cas d'utilisation:
- Pour implémenter le mécanisme de rappel
- Pour implémenter les fonctionnalités d'annulation et de restauration
- Maintenir un historique des commandes