设计模式之命令模式(撤销undo模式)

技术交流群:365814763

设计模式之命令模式(撤销undo模式)

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

设计模式之命令模式是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对

象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

涉及对象:

1、Receiver 命令接收者

2、Command 命令

3、LinghtONCommand 具体命令

4、Invoker 调用命令者 

5、Client 可以设置命令与命令接受者

测试,模拟电灯开关

类之间关系:

具体实现(Command可以为接口类,也可以为抽象类): 

public class CommondPattern {

    public static void main(String[] args) {
        //Receiver 命令接受者
        Linght linght = new Linght();
        //具体命令
        Command linghtONCommand = new LinghtONCommand(linght);
        Command linghtOFFCommand = new LinghtOFFCommand(linght);
        //命令调用者
        Invoker invoker = new Invoker();
        invoker.setCommand(linghtONCommand);
        //执行命令
        invoker.execute();
        invoker.setCommand(linghtOFFCommand);
        invoker.execute();
    }
}

abstract class Command {
    abstract void execute();
}

class Linght {

    public void on() {
        System.out.println("灯打开了============");
    }

    public void off() {
        System.out.println("灯关闭了============");
    }
}

class LinghtONCommand extends Command {
    private Linght linght;

    public LinghtONCommand(Linght linght) {
        this.linght = linght;
    }

    @Override
    void execute() {
        linght.on();
    }
}

class LinghtOFFCommand extends Command {
    private Linght linght;

    public LinghtOFFCommand(Linght linght) {
        this.linght = linght;
    }

    @Override
    void execute() {
        linght.off();
    }

}

class Invoker {
    Command command;

    public Command getCommand() {
        return this.command;
    }

    public void setCommand(Command command) {
        this.command = command;
    }

    public void execute() {
        command.execute();
    }
}

 

命令模式可以撤销,实现方式就是在抽象类中加入一个undo()方法,在具体类中实现undo()方法的具体操作即可。即在调

用命令时,保留调用命令,执行撤销命令(undo)时,调用保留的命令状态

总结:

1、命令模式将发出请求的兑现和执行请求的对象解耦。

2、在被解耦的两者之间是通过命令对象进行沟通的,命令对象封装了接收者和一个或者一组动作。

3、调用者通过调用命令对象的execute()发出请求,这会使得接收者的动作被调用。

4、调用者可以接受命令当做参数,甚至在运行时动态地进行。

5、命令可以支持撤销,做法是实现一个undo()方法回到execute()被执行前的状态。
命令模式也可以用来实现日志和事务系统。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值