[设计模式] 浅谈命令模式

2024 年 5 月 8 日 星期三(已编辑)
/ ,
5
这篇文章上次修改于 2024 年 5 月 8 日 星期三,可能部分内容已经不适用,如有疑问可询问作者。

阅读此文章之前,你可能需要首先阅读以下的文章才能更好的理解上下文。

[设计模式] 浅谈命令模式

命令模式

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

模式思路与原理

  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. 使用命令模式可能会导致某些系统有过多的具体命令类。

总结

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

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...