命令模式的实际应用案例:从电梯控制系统到文本编辑器

时间:2025-05-12 22:48:18
// 命令接口 interface ElevatorCommand { void execute(); } // 接收者类 class Elevator { public void moveUp() { System.out.println("电梯上行"); } public void moveDown() { System.out.println("电梯下行"); } public void openDoor() { System.out.println("电梯门打开"); } public void closeDoor() { System.out.println("电梯门关闭"); } } // 具体命令类 class UpCommand implements ElevatorCommand { private Elevator elevator; public UpCommand(Elevator elevator) { this.elevator = elevator; } @Override public void execute() { elevator.moveUp(); } } class DownCommand implements ElevatorCommand { private Elevator elevator; public DownCommand(Elevator elevator) { this.elevator = elevator; } @Override public void execute() { elevator.moveDown(); } } class OpenDoorCommand implements ElevatorCommand { private Elevator elevator; public OpenDoorCommand(Elevator elevator) { this.elevator = elevator; } @Override public void execute() { elevator.openDoor(); } } class CloseDoorCommand implements ElevatorCommand { private Elevator elevator; public CloseDoorCommand(Elevator elevator) { this.elevator = elevator; } @Override public void execute() { elevator.closeDoor(); } } // 调用者类 class ElevatorController { private ElevatorCommand upCommand; private ElevatorCommand downCommand; private ElevatorCommand openDoorCommand; private ElevatorCommand closeDoorCommand; public ElevatorController(ElevatorCommand upCommand, ElevatorCommand downCommand, ElevatorCommand openDoorCommand, ElevatorCommand closeDoorCommand) { this.upCommand = upCommand; this.downCommand = downCommand; this.openDoorCommand = openDoorCommand; this.closeDoorCommand = closeDoorCommand; } public void pressUpButton() { upCommand.execute(); } public void pressDownButton() { downCommand.execute(); } public void pressOpenDoorButton() { openDoorCommand.execute(); } public void pressCloseDoorButton() { closeDoorCommand.execute(); } } // 客户端代码 public class Client { public static void main(String[] args) { Elevator elevator = new Elevator(); ElevatorCommand upCommand = new UpCommand(elevator); ElevatorCommand downCommand = new DownCommand(elevator); ElevatorCommand openDoorCommand = new OpenDoorCommand(elevator); ElevatorCommand closeDoorCommand = new CloseDoorCommand(elevator); ElevatorController controller = new ElevatorController(upCommand, downCommand, openDoorCommand, closeDoorCommand); // 模拟电梯操作 controller.pressUpButton(); controller.pressOpenDoorButton(); controller.pressCloseDoorButton(); controller.pressDownButton(); } }