【行为型模式】Java设计模式之:命令模式

命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,并且可以对请求进行排队、记录日志、撤销等处理。这种模式可以将请求的发送者和接收者解耦,从而提高系统的灵活性和可扩展性。

命令模式中通常包含四个角色:文章源自新逸网络-https://www.xinac.net/9362.html

1. Command(命令):定义命令的接口,包含执行命令的方法 `execute()`。文章源自新逸网络-https://www.xinac.net/9362.html

2. ConcreteCommand(具体命令):实现命令接口,定义具体的执行方法。文章源自新逸网络-https://www.xinac.net/9362.html

3. Invoker(调用者):负责调用命令对象执行请求。可以持有多个命令对象,可以将命令对象存储在队列中,从而实现请求的排队和撤销等功能。文章源自新逸网络-https://www.xinac.net/9362.html

4. Receiver(接收者):负责接收命令并执行相应的操作。文章源自新逸网络-https://www.xinac.net/9362.html

下面是一个简单的 Java 实现命令模式的示例:文章源自新逸网络-https://www.xinac.net/9362.html

// 命令接口
interface Command {
    void execute();
}

// 具体命令
class ConcreteCommand implements Command {
    private Receiver receiver;

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

    public void execute() {
        receiver.action();
    }
}

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

// 调用者
class Invoker {
    private Command command;

    public void setCommand(Command command) {
        this.command = command;
    }

    public void executeCommand() {
        command.execute();
    }
}

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

        invoker.setCommand(command);
        invoker.executeCommand();
    }
}

在上面的示例中,命令接口定义了 `execute()` 方法,具体命令实现了该方法,并且持有接收者的引用,接收者负责执行具体的操作。调用者持有命令对象,并且通过调用 `executeCommand()` 方法来调用命令对象的 `execute()` 方法。文章源自新逸网络-https://www.xinac.net/9362.html

命令模式的优点是将请求的发送者和接收者解耦,使得系统更加灵活和可扩展。同时,由于命令对象可以被存储在队列中,可以实现请求的排队、记录日志、撤销等操作。但是需要注意的是,由于每个命令对象都需要实现一个接口,因此会增加系统的复杂度和代码量。文章源自新逸网络-https://www.xinac.net/9362.html 文章源自新逸网络-https://www.xinac.net/9362.html

weinxin
新逸IT技术
扫一扫关注微信公众号
Admin
  • 本文由 发表于 2023-04-01
  • 转载请注明:https://www.xinac.net/9362.html
评论  0  访客  0
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定