知识卡片

命令模式支持排队撤销而策略模式不能

普通读书笔记卡 · 1870.b.8

内容

[[策略模式封装完整算法命令模式解耦请求与接收者]]带来策略模式无法企及的能力: 命令对象可被排队、记录、延迟执行或撤销,就像点菜后厨师未做前顾客可”撤单”;策略模式 算法一旦调用就立即执行完毕,不存在中途撤回。发散:选型判断——需多命令排队、撤销/重做 或维持请求者与执行者紧密协作选命令模式;只需多种算法互相替换选策略模式。

参考来源

- 位置:《设计模式之禅(第2版)》第32章《行为类模式大PK》32.1.2-32.1.3节(源文件:_epub-src/text/part0143.html) - 结论依据:原文说明"由于是一个命令模式,接收者的处理可以进行排队处理,在排队处理的过程中,可以进行撤销处理……这是策略模式所不能实现的",并总结使用场景"策略模式适用于算法要求变换的场景,而命令模式适用于解耦两个有紧耦合关系的对象场合或者多命令多撤销的场景"。 - 原始内容:同时,由于是一个命令模式,接收者的处理可以进行排队处理,在排队处理的过程中,可以进行撤销处理,比如客人点了一个菜,厨师还没来得及做,那要撤回很简单,撤回也是命令,这是策略模式所不能实现的……策略模式适用于算法要求变换的场景,而命令模式适用于解耦两个有紧耦合关系的对象场合或者多命令多撤销的场景。