定义:
将请求封装成对象,以便使用不同的请求、队列、或者日志来参数化其他对象。命令模式也支持可撤销的操作。
类图:
实现:
要点:
1 命令模式将发出请求的对象和执行的对象解耦。
2 在被解耦的两者之间是通过命令对象进行沟通的,命令对象封装了接受者和一个或一组动作。
3 调用者通过命令对象的execute()发出请求,这使得接受者的动作被执行。
4 调用者可以接受命令当作参数,甚至在运行时动态地进行。
5 命令可以支持撤销,做法是实现一个undo()方法来回到execute()被执行前的状态。
6 宏命令是命令的一种简单延伸,允许调用多个命令,同时也支持撤销。
7 实际操作时,很常见使用“聪明”命令对象,也就是直接实现了请求,而不是将工作委托给接受者。
8 命令也可以用来实现日志和事务系统。
OO原则:
封装变化
多用组合,少用继承
针对接口编程,不针对实现编程
为交互对象之间的松耦合设计而努力
类应该对扩展开放,对修改关闭
将请求封装成对象,以便使用不同的请求、队列、或者日志来参数化其他对象。命令模式也支持可撤销的操作。
类图:
实现:
要点:
1 命令模式将发出请求的对象和执行的对象解耦。
2 在被解耦的两者之间是通过命令对象进行沟通的,命令对象封装了接受者和一个或一组动作。
3 调用者通过命令对象的execute()发出请求,这使得接受者的动作被执行。
4 调用者可以接受命令当作参数,甚至在运行时动态地进行。
5 命令可以支持撤销,做法是实现一个undo()方法来回到execute()被执行前的状态。
6 宏命令是命令的一种简单延伸,允许调用多个命令,同时也支持撤销。
7 实际操作时,很常见使用“聪明”命令对象,也就是直接实现了请求,而不是将工作委托给接受者。
8 命令也可以用来实现日志和事务系统。
OO原则:
封装变化
多用组合,少用继承
针对接口编程,不针对实现编程
为交互对象之间的松耦合设计而努力
类应该对扩展开放,对修改关闭
依赖抽象,不依赖具体类
要点:
命令模式将发出请求的对象和执行请求的对象解耦。
被解耦的两者之间是通过命令对象进行沟通的,命令对象封装了接收者和一个或一组动作。
调用者通过调用命令对象的execute()发出请求,使得接受者的动作被调用。
调用者可以接受命令当作参数,甚至在运行时动态地进行。
命令模式可以支持撤销,实现一个undo()方法来回到execute()被执行前的状态。
宏命令是命令的一种简单延伸,允许调用多个命令,支持撤销。
命令模式可以用来实现日志和事务系统。