Java设计模式——命令模式

Java设计模式之命令模式

他能帮助我们将动作的请求者动作的执行者解耦

把请求封装(打开灯)成一个特定对象(打开厨房灯)

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

遥控器当按下按键时,把控制灯开关、门开关的的请求提交,把请求提交给相应的命令对象执行其接受者对应的行为。

  • 测试类就是客户,创建很多命令对象,把它加载到遥控器卡槽
  • 遥控器就是命令模式的客户,提交请求,通过setCommand方法把命令传给调用者
  • 灯、车库就是具体的接受者,具有相应的行为
  • 命令对象就是打开关闭灯、打开关闭门灯命令对象

命令对象在遥控器中初始化时,使用了空对象NoCommand,也是一种设计模式,避免进行不必要的判断

//非空判断
if(object!=null){
    ....
}

撤销功能:可以使用添加状态变量来获取前一次状态

多次撤销:可以使用堆栈记录每一次调用状态,撤销时从堆栈中取出

为什么命令对象不实现具体的execute方法?

答:我们尽量使用傻瓜的命令对象,不许关注接受者实现细节,实现调用者和接受者解耦。

命令模式用途

队列请求

命令可以将运算块打包,将他传来传去,命令对象创建许久后依然可以调用运算。

可以实现:日程安排、线程池、工作队列

工作队列

你在一端添加命令,在另一端使用线程依次取出命令并执行

日志

我们执行命令时将历史记录存储在磁盘里。一旦系统死机,我们就可以利用命令对象重新加载,依次调用他们的execute方法(使用序列化实现)

代码地址:Github命令模式


Java设计模式|策略模式

Java设计模式|观察者模式

Java设计模式|装饰者模式

Java设计模式|工厂模式

Java设计模式|命令模式

Java设计模式|适配器模式和外观模式

Java设计模式|模板方法模式

Java设计模式|迭代器模式和组合模式

Java设计模式|状态模式

Java设计模式|代理模式

Java设计模式|单例模式

Java设计模式|备忘录模式

Java设计模式|访问者模式

Java设计模式|复合模式

Java设计模式|桥接模式

Java设计模式|生成器模式

Java设计模式|享元模式/蝇量模式

Java设计模式|原型模式

Java设计模式|责任链模式

Java设计模式|中介者模式

  • 本文作者: dzou | 微信:17856530567
  • 本文链接: http://www.dzou.top/post/667421d7.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
  • 并保留本声明和上方二维码。感谢您的阅读和支持!