核心思想
封装请求:
将请求的每一个部分封装到一个独立的命令对象中;
解耦调用者和接收者:
调用者只需要知道如何调用命令对象,而不需要了解如何处理请求;
可扩展性:
可以很容易地增加新的命令。
优点
解耦:将请求的发送者和接收者解耦。
扩展性:可以很容易地增加新的命令。
支持撤销和恢复操作:如果实现了相应的逻辑,命令可以被撤销或重做。
缺点
类的数量增加:每个命令都需要一个具体的类,这可能导致类的数量增加。
Example
假设你在设计一个遥控器,它可以控制电视开关、音量等操作:
- 命令接口:Command
 - 具体命令:TurnOnCommand, TurnOffCommand
 - 调用者:RemoteControl
 - 接收者:Television
 
下面是一个使用命令模式设计遥控器的Java示例。
接口和类定义
1. 命令接口
public interface Command {
    void execute();
    void undo();
}
2. 具体命令类
public class TurnOnCommand implements Command {
    private Television tv;
    public TurnOnCommand(Television tv) {
        this.tv = tv;
    }
    @Override
    public void execute() {
        tv.turnOn();
    }
    @Override
    public void undo() {
        tv.turnOff();
    }
}
public class TurnOffCommand implements Command {
    private Television tv;
    public TurnOffCommand(Television tv) {
        this.tv = tv;
    }
    @Override
    public void execute() {
        tv.turnOff();
    }
    @Override
    public void undo() {
        tv.turnOn();
    }
}
3. 接收者类
public class Television {
    public void turnOn() {
        System.out.println("Television is ON");
    }
    public void turnOff() {
        System.out.println("Television is OFF");
    }
}
4. 调用者类
public class RemoteControl {
    private Command command;
    public void setCommand(Command command) {
        this.command = command;
    }
    public void pressButton() {
        command.execute();
    }
    public void pressUndo() {
        command.undo();
    }
}
使用示例
public class Main {
    public static void main(String[] args) {
        Television tv = new Television();
        Command turnOn = new TurnOnCommand(tv);
        Command turnOff = new TurnOffCommand(tv);
        RemoteControl remote = new RemoteControl();
        remote.setCommand(turnOn);
        remote.pressButton();  // 输出: Television is ON
        remote.pressUndo();    // 输出: Television is OFF
        remote.setCommand(turnOff);
        remote.pressButton();  // 输出: Television is OFF
        remote.pressUndo();    // 输出: Television is ON
    }
}
说明
- Command接口:定义了
execute和undo方法。 - 具体命令类:
TurnOnCommand和TurnOffCommand实现了Command接口。 - 接收者类:
Television,包含turnOn和turnOff方法。 - 调用者类:
RemoteControl,允许设置命令并执行或撤销。 
这样就实现了一个简单的遥控器案例,能够打开和关闭电视,并支持撤销操作。
                    
                
                
            
        
浙公网安备 33010602011771号