The key difference is to understand 什么 is encapsulated. The OO principle, both patterns depend on, is Encapsulate what varies.
对于策略,变化的是 算法。例如,一个策略对象知道如何输出到 XML 文件,而另一个策略对象知道如何输出到 JSON。不同的算法(encapsulated)保存在不同的类中。就这么简单。
在命令的情况下,变化的是 请求本身。请求可能来自 File Menu > Delete或 Right Click > Context Menu > Delete或 Just Delete Button pressed。这三种情况都可以生成3个相同类型的命令对象。这些命令对象只代表3个删除请求; 不代表删除算法。因为现在请求是一堆对象,所以我们可以很容易地管理它们。突然之间,提供撤消或重做之类的功能就变得微不足道了。