策略和工厂设计模式有什么区别?

What is the difference between Strategy and Factory design pattern?

当我仔细观察Strategy和Factory设计模式时,它看起来几乎相似。 我们可以使用这些模式中的任何一种来实现解决方案。 然后我想知道什么时候用什么。

Abstract Factory 设计模式用于解决以下问题:
- 系统如何独立于其对象的创建方式?
- 如何独立改变创建对象的方式
(无需更改现有 类)?

此模式的关键思想是抽象对象创建过程。
客户(需要创建对象)引用一个抽象 (接口)并且独立于实现 (如何创建对象/实例化了哪些具体 类)。

何时不使用抽象工厂: 不会改变的对象创建 (当实例化的具体 类 永远不会改变时)。

Strategy 设计模式用于解决如下问题:
- 一个对象如何支持使用不同的算法
以便可以动态选择和更改要使用的算法?
- 以及如何独立改变算法的实现方式
(无需更改现有 类)?

例如,在订单处理系统中计算价格。
要以不同的方式计算价格,应该是可能的 支持不同的定价算法 以便可以在 运行 时间选择和动态更改要使用的算法。

此模式的关键思想是解耦算法 (改变)从它的上下文(并将它封装在一个单独的对象中)。

进一步的讨论参见GoF Design Patterns Memory学习 面向对象设计与编程 在 http://w3sdesign.com.