命令模式的实际应用案例:从电梯控制系统到文本编辑器
// 命令接口
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();
}
}