Modo de comando Comando : Encapsular una solicitud como un objeto, de modo que pueda parametrizar el cliente con diferentes solicitudes, solicitar colas o registrar registros de solicitudes y admitir operaciones de prueba.
Modo de comando
Primero, es fácil diseñar una cola de comandos;
segundo, es más fácil integrar comandos en el registro cuando sea necesario;
tercero, la parte que acepta la solicitud puede decidir si rechaza la solicitud;
cuarto, se puede realizar fácilmente cancelación y rehacer de la solicitud; En
quinto lugar, debido a que la clase de comando específica recién agregada no afecta a otras clases, es fácil agregar una nueva clase de comando específica
El patrón de comando separa el objeto que solicita una operación del objeto que sabe cómo realizar una operación.
//命令类,用来声明执行操作的接口
abstract public class Command {
protected Receiver receiver;
protected String string;
public Command(Receiver receiver,String string) {
this.receiver = receiver;
this.string = string;
}
abstract public void Execute(String string);
}
//任何类都可以作为一个接收者,知道如何实施与执行一个与请求相关的操作
public class Receiver {
public void Action(String string) {
System.out.println("执行请求" + string);
}
}
//具体命令类,将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现Execute
public class ConcreteCommand extends Command {
public ConcreteCommand(Receiver receiver, String string) {
super(receiver, string);
}
@Override
public void Execute(String string) {
receiver.Action(string);
}
}
//请求者类,要求该命令执行请求
public class Invoker {
private ArrayList<Command> list = new ArrayList<>();
public void SetCommand(Command command) {
list.add(command);
}
public void CancelCommand(Command command) {
list.remove(command);
}
public void ExecuteCommand() {
for (Command command : list) {
command.Execute(command.string);
}
}
public static void main(String[] args) {
Receiver receiver = new Receiver();
Command commandA = new ConcreteCommand(receiver, "A命令");
Command commandB = new ConcreteCommand(receiver, "B命令");
Invoker invoker = new Invoker();
invoker.SetCommand(commandA);
invoker.SetCommand(commandB);
invoker.ExecuteCommand();
invoker.CancelCommand(commandB);
invoker.ExecuteCommand();
}
}
Producción:
执行请求A命令
执行请求B命令
执行请求A命令