黑马程序员:Java培训、Android培训、iOS培训、.Net培训

                        黑马程序员--命令模式

一、定义

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

        命令(动作,动作执行者)。

二、命令模式类图

       

     1)Client创建一个ConcreteCommand对象并指定他的Invoker对象。

     2)Client创建Receiver对象并在执行时指定他的ConcreteCommand对象。

     3)Receiver对象通过调用ConcreteCommand对象的excute()来提交一个请求。

     4)ConcreteCommand对象通过调用它的Invoker对象执行该请求。

三、适用性

    1、抽象出待执行的动作以参数化某对象,类似过程语言中的回调函数。命令模式是回调机制的一个面向对象的替代品。

2、在不同时刻指定、排列和执行请求。

3、支持取消操作。

4、支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍。

5、用构建在原语操作上的高层操作构建一个系统。例如,事务系统。命令模式提供了对事务进行建模的方法。

四、使用命令模式需要考虑的问题:

    1、命令对象应当达到何种智能程度

           命令对象的能力可大可小。一个极端是他仅仅确定一个命令执行者(nvoker)执行该请求的动作;一个极端是他自己实现所有功能,根本不需要额外的执行者对象。

2、支持取消(undo)和重做(redo)

       即提供方法逆转(reverse)他们操作的执行。这需要我们存储额外的状态信息:

           1)执行者

           2)执行者上执行操作的参数

           3)如果处理请求的操作会改变执行者中的某些值,那么这些值也需要保存。

    3、避免取消操作过程中的错误累积。

 

写在模式之前:http://www.cnblogs.com/oo-lab/articles/4593399.html

策略模式:http://www.cnblogs.com/oo-lab/articles/4593407.html
迭代器模式:http://www.cnblogs.com/oo-lab/articles/4593416.html
观察者模式:http://www.cnblogs.com/oo-lab/articles/4593418.html
命令模式:http://www.cnblogs.com/oo-lab/articles/4593425.html
模板方法模式:http://www.cnblogs.com/oo-lab/articles/4593428.html
状态模式:http://www.cnblogs.com/oo-lab/articles/4593429.html

单件模式:http://www.cnblogs.com/oo-lab/articles/4593432.html
工厂方法模式:http://www.cnblogs.com/oo-lab/articles/4593435.html
抽象工厂模式:http://www.cnblogs.com/oo-lab/articles/4593440.html
生成器模式:http://www.cnblogs.com/oo-lab/articles/4593444.html