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 :

entrer la description de l'image ici

Composants de base et workflow:

  1. Command déclare une interface pour les commandes abstraites telles que execute()
  2. Receiver sait comment exécuter une commande particulière
  3. Invoker contient ConcreteCommand , qui doit être exécuté
  4. Client crée ConcreteCommand et attribue le Receiver
  5. ConcreteCommand définit la liaison entre la Command et le Receiver

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,

  1. L' interface de commande définit la méthode execute() .
  2. OnCommand est ConcreteCommand , qui implémente la méthode execute() .
  3. Receiver est la classe de base.
  4. TV et DVDPlayer sont deux types de récepteurs , qui sont transmis à ConcreteCommand comme OnCommand.
  5. Invoker contient la commande . C'est la clé pour séparer l'expéditeur du récepteur .
  6. 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:

  1. Pour implémenter le mécanisme de rappel
  2. Pour implémenter les fonctionnalités d'annulation et de restauration
  3. Maintenir un historique des commandes


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow