设计模式——命令模式(下)

设计模式——命令模式(下)


作者:云都小生


命令队列的处理



现实中有这么一种情况,我们墙壁上有一个按钮开关,这个开关按下去之后,就会打开厕所的电灯和排风扇。

没错,在命令模式的设计过程中我们也会碰到这样的情况,我们的接受者并不只有一个,所以我们需要一个命令队列。先让接受者1进行处理,再让接受者2进行处理。

class CommandQueue {  
    //定义一个ArrayList来存储命令队列  
    private ArrayList<Command> commands = new ArrayList<Command>();  

    public void addCommand(Command command) {  
        commands.add(command);  
    }  

    public void removeCommand(Command command) {  
        commands.remove(command);  
    }  

    //循环调用每一个命c令对象的execute()方法  
    public void exeute() {  
        for (Object command : commands) {  
            ((Command)command).execute();  
        }  
    }  
}

class Invoker {  
    private CommandQueue commandQueue;

    public Invoker(CommandQueue commandQueue) {  
        this. commandQueue = commandQueue;  
    }  

    public void setCommandQueue(CommandQueue commandQueue) {  
        this.commandQueue = commandQueue;  
    }

    public void call() {  
        commandQueue.execute();  
    }  
}  


撤销与恢复


命令模式的设计中,可以实现撤销(回到上一个状态),也可以实现(恢复撤销前的一个状态)。

这两个功能要按具体情况去设计,不过,可以采用“保存对象上一个状态”来实现,也就是每次进行这次操作之后,就Undo()保存这个对象相关的关键信息(属性)。

还可以实现一个Redo()方法,恢复到“撤销前”的一个状态。


日志的引入


日志可以记录用户的操作,也可以记录程序的关键信息。

该功能也要按照具体情况的去设计。


不算总结的总结



命令模式的关键在于,它对请求发送者和接受者进行了解耦,让它们之间并不存在直接的关系。

没错,优点就是降低了系统的耦合度,符合开闭原则,需要添加新命令的时候可以不修改源代码,直接添加。但是,如果命令太多的话,就会影响整个系统。

2018/1/9 9:10:14 @Author:Cloudking

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值