命令设计模式

 

 

/**
 * @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();

    }
}

 

posted on 2021-12-20 20:10  无心睡眠A8  阅读(27)  评论(0)    收藏  举报