设计模式 - 浅谈命令模式

命令模式

模式功能说明:在命令模式中,请求在对象中作为命令来封装,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把命令传给相应的对象,该对象执行命令。

模式思路与原理

  1. 抽象命令类(Command):声明执行操作的接口。
  2. 具体命令类(ConcreteCommand):是抽象命令类的实现者,它定义了动作和接收者之间的绑定关系。
  3. 调用者(Invoker):负责调用命令。
  4. 接收者(Receiver):接收命令并执行命令。

代码示例

// 抽象命令类
public interface Command {
    void execute();
}

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

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

// 接收者
public class Receiver {
    public void action() {
        System.out.println("执行操作");
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Receiver receiver = new Receiver();
        Command command = new ConcreteCommand(receiver);
        Invoker invoker = new Invoker(command);
        invoker.call();
    }
}

Receiver是接收者,执行操作的具体对象。ConcreteCommand是具体命令,它持有一个对Receiver对象的引用,并调用其action方法。Invoker是调用者,它持有一个对Command对象的引用,可以用来执行命令。

使用场景:

  • 对请求者和接收者需要解耦,使得调用者和接收者不直接交互。
  • 需要抽象出等待执行的操作

优缺点

优点:

  1. 降低系统的耦合度。
  2. 新的命令可以很容易地加入到系统中。

缺点:

  1. 使用命令模式可能会导致某些系统有过多的具体命令类。

总结

模板模式将请求封装为一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 模板模式它提供了一种将请求和操作解耦的方式,使得请求的发送者和接收者之间没有直接引用。这使得系统更加灵活,能更好地应对变化。


本文链接:

https://pugqq.com/archives/command-pattern.html
设计模式 - 浅谈命令模式 - I/O
快来做第一个评论的人吧~

# 最近更新

Nginx的proxy_pass指令完全拆解2021-03-21

Nginx配置Jenkins域名访问2021-01-03

设计模式 - 浅谈备忘录模式2020-12-02

设计模式 - 浅谈中介者模式2020-11-23

设计模式 - 浅谈迭代器模式2020-11-02

MySQL5.7 字符集设置2020-10-26

设计模式 - 浅谈状态模式2020-10-23

设计模式 - 浅谈访问者模式2020-10-13

设计模式 - 浅谈观察者模式2020-10-12

设计模式 - 浅谈命令模式2020-09-21