Design patterns
Шаблон команды
Поиск…
Пример шаблона команды в Java
определение википедии :
Шаблон команды представляет собой шаблон поведения, в котором объект используется для инкапсулирования всей информации, необходимой для выполнения действия или запуска события в более позднее время
UML диаграммы из dofactory :
Основные компоненты и рабочий процесс:
-
Command
объявляет интерфейс для абстрактных команд, таких какexecute()
-
Receiver
знает, как выполнить определенную команду -
Invoker
содержитConcreteCommand
, который должен быть выполнен -
Client
создаетConcreteCommand
и назначаетReceiver
-
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
Объяснение:
В этом примере,
- Командный интерфейс определяет метод
execute()
. - OnCommand - ConcreteCommand , который реализует метод
execute()
. - Приемник - базовый класс.
- TV и DVDPlayer - это два типа приемников , которые передаются ConcreteCommand, например OnCommand.
- Invoker содержит команду . Это ключ к отмене отправителя от приемника .
- Invoker получает OnCommand -> который вызывает приемник (телевизор) , чтобы выполнить эту команду.
Используя Invoker, вы можете включить телевизор и DVD-плеер. Если вы расширите эту программу, вы также отключите телевизор и DVD-плеер.
Ключевые варианты использования:
- Чтобы реализовать механизм обратного вызова
- Чтобы реализовать функции отмены и повтора
- Ведение истории команд