Поиск…


Пример шаблона команды в Java

определение википедии :

Шаблон команды представляет собой шаблон поведения, в котором объект используется для инкапсулирования всей информации, необходимой для выполнения действия или запуска события в более позднее время

UML диаграммы из dofactory :

введите описание изображения здесь

Основные компоненты и рабочий процесс:

  1. Command объявляет интерфейс для абстрактных команд, таких как execute()
  2. Receiver знает, как выполнить определенную команду
  3. Invoker содержит ConcreteCommand , который должен быть выполнен
  4. Client создает ConcreteCommand и назначает Receiver
  5. ConcreteCommand определяет привязку между Command и Receiver

Таким образом, командный шаблон отделяет отправителя (клиента) от приемника через Invoker . Invoker имеет полное представление о том, какая команда должна выполняться, а Command знает, какой приемник должен быть вызван для выполнения конкретной операции.

Фрагмент кода:

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();            
    }
}

выход:

Switch on from:TV
Switch on from:DVDPlayer

Объяснение:

В этом примере,

  1. Командный интерфейс определяет метод execute() .
  2. OnCommand - ConcreteCommand , который реализует метод execute() .
  3. Приемник - базовый класс.
  4. TV и DVDPlayer - это два типа приемников , которые передаются ConcreteCommand, например OnCommand.
  5. Invoker содержит команду . Это ключ к отмене отправителя от приемника .
  6. Invoker получает OnCommand -> который вызывает приемник (телевизор) , чтобы выполнить эту команду.

Используя Invoker, вы можете включить телевизор и DVD-плеер. Если вы расширите эту программу, вы также отключите телевизор и DVD-плеер.

Ключевые варианты использования:

  1. Чтобы реализовать механизм обратного вызова
  2. Чтобы реализовать функции отмены и повтора
  3. Ведение истории команд


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow