如何使用Lambda表达式实现命令模式?代码举例讲解

命令模式将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。Lambda 表达式可以很好地实现命令模式中命令的定义。我们来看一个例子:
假设我们有一个遥控器,可以对电视执行各种命令。这是一个使用命令模式的很好示例。

使用 Lambda 表达式实现命令模式:

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

// 具体的命令实现
Command turnOn = () -> System.out.println("电视机开机");
Command turnOff = () -> System.out.println("电视机关机");  

// 遥控器  
class RemoteControl {
    private Command command;

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

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

// 使用场景  
RemoteControl control = new RemoteControl();
control.setCommand(turnOn);
control.pressButton();  // 电视机开机

control.setCommand(turnOff);
control.pressButton(); // 电视机关机 

这里 Command 接口表示命令,turnOn 和 turnOff 是两种具体的命令实现,使用 Lambda 表达式实现。RemoteControl 是遥控器,可以设置和执行命令。

我们可以通过为 RemoteControl 设置不同的 Command 来选择执行不同的操作,这体现了命令模式的关键思想。