黑马程序员: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