932 B
932 B
Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations.(将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。)
- Receive 接受者角色
- Command 命令角色
- Invoker 调用者角色
优点
- 类间解耦
- 可扩展性
- 结合其它模式(命令链模式,模板方法模式)会更优秀
缺点
Command 子类如果有 N 个命令,就会有 N 个子类,这个类膨胀的非常大
使用场景
只要认为是命令的地方就可以用命令模式, GUI 开发一个按钮的点击, 模拟 DOS 命令, 触发-反馈机制的处理
反悔问题
发出一个命令,要撤回
- 结合备忘录模式还原最后状态
- 增加一个新的命令,实现事件的回滚