15、命令行模式(设计模式笔记)

一、介绍

  • 命令模式:将一个请求封装为一个对象,从而使我们可用不同的请求对客户端进行参数化;对请求排队或者记录请求记录,以及支持可撤销的操作。也称之为:动作Action模式、事物Transaction模式

二、结构

  • command抽象命令类
  • ConcreteCommand具体命令类
  • Invoker调用者/请求者
    • 请求的发送者,它通过命令对象来执行请求。一个调用者并不需要在设计时确定其接受者,因此它只与抽象命令之间存在关联。在程序运行时,将调用命令对象的execute(),间接调用接收者的相关操作。
  • Receiver接收者
    接收者执行与请求相关的操作,具体实现对请求的业务处理。未抽象前,实际执行操作内容的对象
  • Client客户类
    在客户类中需要创建调用者对象、具体命令类对象,在创建具体命令对象时指定对应的接收者。发送者和接收者之间没有直接关系,都通过命令对象间接调用。

三、实例

Receiver,java

package cn.itcast.day246.command;
//接收者
public class Receiver {
    public void action(){
        System.out.println("接收者执行命令");
    }
}

Command.java

package cn.itcast.day246.command;
//命令处理的中转接口
public interface Command {
    public void execute();// 这里是返回一个空,但是实际开发中我们可以添加多个不同的方法
}

// 实际中转类
class ConcreteCommand implements Command {

    private Receiver receiver;// 命令的真正执行者,当然这里也可以使用一个容器来保存多个命令的接收者

    public ConcreteCommand(Receiver receiver) {
        this.receiver = receiver;
    }

    @Override
    public void execute() {
        // 调用前的相关处理
        //...
        
        receiver.action();
        
        // 调用前的相关处理
        //...
    }
}

Invoker.java

package cn.itcast.day246.command;
//命令的发起者
public class Invoker {
    private Command command;// 当然这里我们也可以使用一个容器来保存多条命令

    public Invoker(Command command) {
        this.command = command;
    }
    
    //业务方法,用于调用命令类的方法
    public void call() {
        // 调用前的相关处理
        // ...

        command.execute();

        // 调用后的相关处理
        // ...
    }
}

说明:从上面可以看到,实际上命令处理类实际上就相当于一个中转站,它从一个或者多个命令发出者(Invoker )接收到一条或多条命令,然后分别发送到一个或多个接收者(Receiver),当然在接收到命令之后可以进行相关的处理(这里可以进行批处理),然后发送给接收者进行处理。

你可能感兴趣的:(15、命令行模式(设计模式笔记))