首页 > 其他 > 详细

行为模式:命令模式(Command Pattern)

时间:2014-04-04 06:23:42      阅读:336      评论:0      收藏:0      [点我收藏+]

一,Command Pattern(命令模式)

命令模式也叫事务模式(因为可以执行事务操作),并且是一种行为模式(behavioral design pattern.)

命令模式是对命令的封装,用户程序使用的时候,请求方(Invoker)只与命令(Command)进行交互,让命令(Command)同接收命令的对象(Receiver)交互。降低了请求(Invoker)方与接收方(Command)的耦合度。

命令模式使请求方和接收方独立开来,使得请求方不必知道接收方使用的接口。更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。

命令模式设计到了5个角色:

Client(客户):创建具体命令(ConcreteCommand)对象和命令的接收者(Receiver);

Command(命令):声明一个给具体命令实现的接口或者抽象类。

ConcreteCommand(具体命令):义一个接受者和行为之间的弱耦合;实现Execute()方法,负责调用接收考的相应操作。Execute()方法通常叫做执方法。

Invoker(请求方):调用命令对象执行请求。

Receiver(接收方):具体实施一个请求。

命令模式的优点:

                 具体的命令可以被不同的请求者角色重用

      容易构造命令队列(多个命令装配程一个复合命令)

      增加新的命令很容易,因为无须改变现有的类

      记录相关的命令日志

      增加命令状态,实现命令的撤销(undo)和重做(redo)

      允许接收请求的一方决定是否可做

命令模式的缺点:

      会导致系统内有过多的命令类。

适用场合:

1,  Transactional behavior(事务行为)

      a) 使用命令模式,可以简单的实现以下事务行为,当一个事务失败,回退到之前的状态,可以使用命令保存这种状态,简单的处理回退操作。

2,  Swing中,工具条上按钮执行的命令,可以用command来封装这些命令

3,  (Thread pools)线程池之中,Runnable就相当于一个命令接口(Command),实现它相当于一个具体命令(ConcreteCommand)。线程池类相当于调用者(Invoker)

4,  Macro  Record(宏记录)

      a)  可以通过command简单的封装用户的一个操作,系统就可以通过队列来保存一些类的用户操作。通过执行队列的操作,可以执行返回操作。

5,  Network

     a) 通过网络可以发送命令到其他机器上运行

6,  Struts中的Action  ,已登陆为例,Action就相当于一个命令接口,实现LoginAction的类为具体命令,当jsp页面发送一login个请求,执行LoginAction(具体命令)中的 execute()方法,最以后调用相关的业务逻辑中的接收角色

命令模式总结:

命令模式解决了“行为请求者”与“行为实现者”之间紧密耦合的问题。

   日志记录,命令撤销,批处理,事务支持都是它带来的好处。

 综合网上和书籍资料理解所得。请指正。随时更新

行为模式:命令模式(Command Pattern),布布扣,bubuko.com

行为模式:命令模式(Command Pattern)

原文:http://www.cnblogs.com/mjaioy/p/3642858.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!