Modo de diseño 17, modo de comando

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命令

Supongo que te gusta

Origin blog.csdn.net/weixin_45401129/article/details/114629533
Recomendado
Clasificación