文档地址:《设计模式之禅》
切入故事: 项目经理也难当
定义: Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations.(将一个请求封装成一个对象, 从而让你使用不同的请求把客户端参数化, 对请求排队或者记录请求日志, 可以提供命令的撤销和恢复功能。 )
通用类图:
● Receive接收者角色
该角色就是干活的角色, 命令传递到这里是应该被执行的, 具体到我们上面的例子中就是Group的三个实现类。
● Command命令角色( 命令模式的核心)
需要执行的所有命令都在这里声明。
● Invoker调用者角色
接收到命令, 并执行命令。 在例子中, 我(项目经理) 就是这个角色。
优点:
1: 类间解耦
2: 可扩展性
3: 命令模式结合其他模式会更优秀
命令模式可以结合责任链模式, 实现命令族解析任务; 结合模板方法模式, 则可以减少Command子类的膨胀问题
缺点: Command的子类会特别多,非常大
使用场景:具有 命令的地方
个人总结:
命令模式是一个高内聚的模式。
*:在项目中通过有意义的类名或命令名处理命令角色和接收者角色的耦合关系(这就是约定) , 减少高层模块(Client类) 对低层模块(Receiver角色类) 的依赖关系, 提高系统整体的稳定性。