“Head First 设计模式“ :命令模式

发布时间:2020-07-21 16:08:04 作者:u2r2otkit
来源:网络 阅读:521

命令模式


命令模式定义:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
命令模式,封装方法调用,命令模式可将“动作的请求者”从“动作的执行者”对象中解耦。类图,如下:

“Head First 设计模式“ :命令模式


生活中例子:餐厅点菜(顾客,服务员,厨师关系,顾客订单告诉服务员就是,不用直接厨师打交道,厨师收到服务员的发来的订单后开始做好大餐)。


命令模式的优点
● 在命令模式中, 请求者不直接与接收者交互, 即请求者不包含接收者的引用, 因此彻底消除了彼此之间的耦合.
● 命令模式满足"开-闭"原则. 如果增加新的具体命令和该命令的接收者, 不必修改调用者的代码, 调用者就可以使用新的命令对象; 反之, 如果增加新的调用者, 不必修改现有的具体命令和接收者, 新增加的调用者就可以使用自己已有的具体命令
● 由于请求者被封装到了具体命令中, 那么就可以将具体命令保存到持久化的媒介中, 在需要的时候, 重新执行这个具体命令. 因此使用命令模式可以记录日志.
● 使用命令模式可以对请求者的"请求"进行排队. 每个请求都各自对应一个具体命令,因此可以按照一定的顺序执行这些命令.


命令模式的使用场景
● 命令模式将发出请求的对象和执行请求的对象进行解耦
● 用于队列请求,命令对象和一般对象一样可以被传来传去,只要实现统一的接口方法,可以被任意调用
● 用于日志请求,将所有动作记录在日志中,以便系统死机后能够重新调用来恢复


案例1:实现一个家庭自动化遥控器,能遥控灯,空调,,,等设备的开/关。(硬件api类是厂家提供),类图如下:
“Head First 设计模式“ :命令模式


更多需求思考?
● 如果需要撤销命令,怎么修改呢?
● 如果需要组合命令,比如(先打开灯,然后打开电视,然后打开热水器,打开影响),这么实现呢?
● 如命令需要跨jvm,跨机器执行,怎么实现呢?
● 如果需要宕机后恢复数据,怎么实现呢?

推荐阅读:
  1. 戴尔R740服务器获取cpu、内存、硬盘参数信息。
  2. MySQL高可用集群架构——MHA架构

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

命令模式 命令 设计模式

上一篇:详解python如何实现爱奇艺登陆密码RSA加密

下一篇:Node.js API中vm模块用法实例详解

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》