命令模式
命令模式定义:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
命令模式,封装方法调用,命令模式可将“动作的请求者”从“动作的执行者”对象中解耦。类图,如下:
成都创新互联服务项目包括牟定网站建设、牟定网站制作、牟定网页制作以及牟定网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,牟定网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到牟定省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
生活中例子:餐厅点菜(顾客,服务员,厨师关系,顾客订单告诉服务员就是,不用直接厨师打交道,厨师收到服务员的发来的订单后开始做好大餐)。
命令模式的优点:
● 在命令模式中, 请求者不直接与接收者交互, 即请求者不包含接收者的引用, 因此彻底消除了彼此之间的耦合.
● 命令模式满足"开-闭"原则. 如果增加新的具体命令和该命令的接收者, 不必修改调用者的代码, 调用者就可以使用新的命令对象; 反之, 如果增加新的调用者, 不必修改现有的具体命令和接收者, 新增加的调用者就可以使用自己已有的具体命令
● 由于请求者被封装到了具体命令中, 那么就可以将具体命令保存到持久化的媒介中, 在需要的时候, 重新执行这个具体命令. 因此使用命令模式可以记录日志.
● 使用命令模式可以对请求者的"请求"进行排队. 每个请求都各自对应一个具体命令,因此可以按照一定的顺序执行这些命令.
命令模式的使用场景:
● 命令模式将发出请求的对象和执行请求的对象进行解耦
● 用于队列请求,命令对象和一般对象一样可以被传来传去,只要实现统一的接口方法,可以被任意调用
● 用于日志请求,将所有动作记录在日志中,以便系统死机后能够重新调用来恢复
案例1:实现一个家庭自动化遥控器,能遥控灯,空调,,,等设备的开/关。(硬件api类是厂家提供),类图如下:
更多需求思考?
● 如果需要撤销命令,怎么修改呢?
● 如果需要组合命令,比如(先打开灯,然后打开电视,然后打开热水器,打开影响),这么实现呢?
● 如命令需要跨jvm,跨机器执行,怎么实现呢?
● 如果需要宕机后恢复数据,怎么实现呢?
新闻标题:“HeadFirst设计模式“:命令模式
网站URL:http://lswzjz.com/article/jeoejj.html