知识卡片
策略模式封装完整算法命令模式解耦请求与接收者
内容
策略模式和命令模式类图相似(命令模式多一个接收者角色),但关注点不同。策略模式 把算法当完整不可再拆分的原子业务,让多种算法自由替换,算法不能因支持另一种格式被拆开 重组;命令模式关注解耦——把动作拆成命令(谁发起)和接收者(谁执行)两端,接收者内部 可随意重新设计,只要不影响请求者。发散:这解释了为何压缩需求下命令模式能按压缩/解压 职责重组接收者,策略模式不行。
参考来源
- 位置:《设计模式之禅(第2版)》第32章《行为类模式大PK》32.1节(源文件:_epub-src/text/part0143.html)
- 结论依据:原文用zip/gzip压缩需求分别用策略模式和命令模式实现对比,总结"策略模式的意图是封装算法,它认为'算法'已经是一个完整的、不可拆分的原子业务……命令模式则是对动作的解耦,把一个动作的执行分为执行对象(接收者角色)、执行行为(命令角色)……因为命令模式着重于请求者和接收者解耦,你管我接收者怎么变化,只要不影响请求者就成"。
- 原始内容:策略模式的意图是封装算法,它认为"算法"已经是一个完整的、不可拆分的原子业务……而命令模式则是对动作的解耦……我们按照职责设计的接口就不适用于策略模式,不可能封装一个叫做压缩的算法类……这违背了策略模式的意图——封装算法……因为命令模式着重于请求者和接收者解耦,你管我接收者怎么变化,只要不影响请求者就成。