Обмен технологиями

Изучите шаблоны команд и их применение.

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

командный режим

командный режим — это шаблон поведенческого проектирования, который преобразует запрос в отдельный объект, содержащий всю информацию, связанную с запросом. Это преобразование позволяет параметризовать методы на основе различных запросов, задержек или запросов в очереди, а также реализовывать отменяемые операции.

Структура командного режима

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

  1. отправитель (Sender) — также известный как «Invoker» — класс отвечает за инициализацию запроса, который должен содержать переменную-член для хранения ссылки на объект команды. Отправитель запускает команду, не отправляя запрос непосредственно получателю. Обратите внимание, что отправитель не несет ответственности за создание объекта команды: обычно он получает предварительно сгенерированную команду от клиента через конструктор.
  2. Заказ(Командный) интерфейс обычно объявляет только метод выполнения команды.
  3. Конкретные заказы (Конкретные команды) будут реализовывать различные типы запросов. Сама по себе конкретная команда не завершает работу, а делегирует вызов объекту бизнес-логики. Но для упрощения кода эти классы можно объединить. Параметры, необходимые для получения метода выполнения объекта, могут быть объявлены как переменные-члены определенных команд. Вы можете сделать объект команды неизменяемым и разрешить инициализацию этих переменных-членов только через конструктор.
  4. получатель Класс (Получатель) содержит часть бизнес-логики. Приемником может служить практически любой объект. Большинство команд касаются только деталей того, как передать запрос получателю, а сам получатель выполнит всю работу.
  5. клиент (Клиент) создаст и настроит определенные объекты команд. Клиент должен передать все параметры запроса, включая объект-получатель, конструктору команды. После этого сгенерированная команда может быть связана с одним или несколькими отправителями.

Общий код для командного режима:

//抽象接收者
public abstract class Receiver{
	public abstract void operation();
}

//具体接收者
public class Recevier1 extends Recevier{
	public void operation(){
		...
	}
}

//通用命令接口
public interface Command{
	void execute();
}

//具体命令类
public class ConcreteCommand1 implements Command{
	private Receiver receiver;
	
	public ConcreteCommand1(Receiver _receiver){
		 this.receiver = _receiver;
	}
	
	public void execute(){
		this.receiver.operation();
	}
}

//调用者类
public class Invoker{
	private Command command;
	
	public void setCommand(Command _command){
		this.command = _command;
	}
	
	public void executeCommand(){
		this.command.execute();
	}
	
}

//主程序类
public class Client{
	public static void main(String[] args){
		//调用者
		Invoker invoker = new Invoker();
		//接收者
		Receiver receiver1 = new Receiver1();
		//定义一个命令
		Command command = new ConcreteCommand1(receiver1);
		
		invoker.setCommand(command);
		invoker.executeCommand();
	}
}