设计模式之命令模式(十四)

命令模式是一种行为型设计模式,它将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,同时将请求排队或记录请求日志,以及支持可撤销的操作。命令模式使得请求的发送者(Invoker)和请求的接收者(Receiver)解耦,让请求可以被队列、记录日志、撤销等。

命令模式中通常包含以下几个角色:

  1. 命令(Command):命令是一个接口,该接口定义了执行命令的方法。

  2. 具体命令(ConcreteCommand):具体命令类实现了命令接口,在具体命令中绑定了一个接收者和一组动作。

  3. 接收者(Receiver):接收者是一个类,执行具体的命令。

  4. 调用者(Invoker):调用者是一个类,它可以接收并执行命令,并且可以支持命令的撤销操作。

下面以Java为例,说明命令模式的具体使用:

命令接口:

public interface Command {
    public void execute();
}

具体命令类:

public class ConcreteCommandA implements Command {
    private Receiver receiver;
    
    public ConcreteCommandA(Receiver receiver) {
        this.receiver = receiver;
    }
    
    @Override
    public void execute() {
        receiver.actionA();
    }
}

public class ConcreteCommandB implements Command {
    private Receiver receiver;
    
    public ConcreteCommandB(Receiver receiver) {
        this.receiver = receiver;
    }
    
    @Override
    public void execute() {
        receiver.actionB();
    }
}

接收者类:

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

调用者类:

public class Invoker {
    private Command command;
    
    public Invoker(Command command) {
        this.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 commandA = new ConcreteCommandA(receiver);
        Command commandB = new ConcreteCommandB(receiver);
        
        Invoker invoker = new Invoker(commandA);
        invoker.executeCommand();
        
        invoker.setCommand(commandB);
        invoker.executeCommand();
    }
}

在这个例子中,Command是一个接口,ConcreteCommandA和ConcreteCommandB是具体命令类,Receiver是接收者类,Invoker是调用者类。当客户端(Client)执行命令时,它实际上是将一个具体的命令对象传递给调用者(Invoker)对象,并且调用者(Invoker)对象执行该命令。

命令模式的主要作用是将请求者和接收者解耦。它可以将请求封装成一个对象并进行各种操作,例如记录请求日志、异步处理请求等。另外,命令模式还支持撤销、排队等一系列操作,可以大大增加系统的灵活性。适用于以下场景:

  1. 当需要抽象出需要执行的动作并将其作为参数进行传递时。

  2. 当需要支持撤销操作时。

  3. 当需要将多个操作封装为一个对象并进行统一操作时

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值