命令模式

定义:将请求封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。命令模式也支持可撤销的操作

类图

示例

//Receiver
public class Light {
    public void lightOn(){
        System.out.println("开灯!");
    }
    public void lightOff(){
        System.out.println("关灯!");
    }
}

//Command接口
public interface Command {
    void execute();//执行命令

    void undo();//撤销命令
}

//ConcreteCommand
public class LightOnCommand implements Command{
    Light light;
    public LightOnCommand(Light light){
        this.light =light;
    }
    @Override
    public void execute() {
        light.lightOn();
    }

    @Override
    public void undo() {
        light.lightOff();
    }
}

//Invoker
public class Invoker {
    Command command;
    public void setCommand(Command command){
        this.command = command;
    }
    public void operation(){//开始执行命令
        command.execute();
    }
    public void undoOperation(){//撤销执行命令
        command.undo();
    }
}


//Client
public class CommandTestDemo {
    public static void main(String[] args) {
        Light light = new Light();

        Command lightOnCommand = new LightOnCommand(light); //把Receiver设置到ConcreteCommand

        Invoker invoker = new Invoker();
        invoker.setCommand(lightOnCommand);//调用者持有Invoker决定什么时候调用ConcreteCommand

        invoker.operation();//开始执行操作
        invoker.undoOperation();//撤销操作
    }
}

执行结果

使用场景

  • 需要对用户请求和实际行为解耦的情况,如:需要记录,撤销,事务等处理时。
  • 把一组动作封装进一个命令,实现宏命令。
  • 队列请求。
  • 日志请求。

 

posted @ 2020-02-24 18:27  Camcay  阅读(109)  评论(0)    收藏  举报