![]()
/**
* @Author zh
* @Description 命令的接口,用来规范执行的方法
* @Date 2021/12/20
*/
public interface ICommand {
//执行命令
public void execute();
//撤销命令
public void undo();
}
@Data
public class PcOffCommandImpl implements ICommand {
private PcReceiver pcReceiver;
@Override
public void execute() {
pcReceiver.off();
}
@Override
public void undo() {
pcReceiver.undoOn();
}
}
@Data
public class PcOnCommandImpl implements ICommand {
//持有命令
private PcReceiver pcReceiver;
@Override
public void execute() {
pcReceiver.on();
}
@Override
public void undo() {
pcReceiver.undoOn();
}
}
/**
* @Author zh
* @Description 命令的逻辑类:
* @Date 2021/12/20
*/
public class PcReceiver {
//开机命令执行体
public void on(){
System.out.println("开机命令");
}
public void undoOn(){
System.out.println("撤销开机命令");
}
public void off(){
System.out.println("关机命令");
}
public void undoOff(){
System.out.println("撤销关机命令");
}
}
/**
* @Author zh
* @Description remote遥控器的方式进行调用: 解耦
* @Date 2021/12/20
*/
public class RemoteController {
//开机命令类
private ICommand pcOnCommand;
//关机命令类
private ICommand pcOffCommand;
//撤销命令类
private ICommand undoCOmmand;
//开机命令
public void executeOn(){
pcOnCommand.execute();
//此时如果调用撤销:那么就是执行 开机的撤销
undoCOmmand= pcOnCommand;
}
//关机命令
public void executeOff(){
pcOffCommand.execute();
undoCOmmand =pcOffCommand;
}
//撤销开机或者关机命令
public void undo(){
undoCOmmand.undo();
}
public ICommand getPcOnCommand() {
return pcOnCommand;
}
public void setPcOnCommand(ICommand pcOnCommand) {
this.pcOnCommand = pcOnCommand;
}
public ICommand getPcOffCommand() {
return pcOffCommand;
}
public void setPcOffCommand(ICommand pcOffCommand) {
this.pcOffCommand = pcOffCommand;
}
public ICommand getUndoCOmmand() {
return undoCOmmand;
}
public void setUndoCOmmand(ICommand undoCOmmand) {
this.undoCOmmand = undoCOmmand;
}
}
public class TMain {
public static void main(String[] args) {
//1.准备一个命令类
PcReceiver pcReceiver =new PcReceiver();
//2.开机命令
PcOnCommandImpl onCommand =new PcOnCommandImpl();
onCommand.setPcReceiver(pcReceiver);
//3.关机命令
PcOffCommandImpl offCommand =new PcOffCommandImpl();
offCommand.setPcReceiver(pcReceiver);
//4.准备遥控器
RemoteController rc =new RemoteController();
rc.setPcOnCommand(onCommand);
rc.setPcOffCommand(offCommand);
//5.调用开机命令
System.out.println("==============开机=====================");
rc.executeOn();
System.out.println("===============撤销开机==================");
rc.undo();
System.out.println("===============关机======================");
rc.executeOff();
System.out.println("=================撤销关机=================");
rc.undo();
}
}