策略和工厂设计模式有什么区别?
What is the difference between Strategy and Factory design pattern?
当我仔细观察Strategy和Factory设计模式时,它看起来几乎相似。
我们可以使用这些模式中的任何一种来实现解决方案。
然后我想知道什么时候用什么。
Abstract Factory
设计模式用于解决以下问题:
- 系统如何独立于其对象的创建方式?
- 如何独立改变创建对象的方式
(无需更改现有 类)?
此模式的关键思想是抽象对象创建过程。
客户(需要创建对象)引用一个抽象
(接口)并且独立于实现
(如何创建对象/实例化了哪些具体 类)。
何时不使用抽象工厂:
不会改变的对象创建
(当实例化的具体 类 永远不会改变时)。
Strategy
设计模式用于解决如下问题:
- 一个对象如何支持使用不同的算法
以便可以动态选择和更改要使用的算法?
- 以及如何独立改变算法的实现方式
(无需更改现有 类)?
例如,在订单处理系统中计算价格。
要以不同的方式计算价格,应该是可能的
支持不同的定价算法
以便可以在 运行 时间选择和动态更改要使用的算法。
此模式的关键思想是解耦算法
(改变)从它的上下文(并将它封装在一个单独的对象中)。
进一步的讨论参见GoF Design Patterns Memory学习
面向对象设计与编程
在 http://w3sdesign.com.
当我仔细观察Strategy和Factory设计模式时,它看起来几乎相似。 我们可以使用这些模式中的任何一种来实现解决方案。 然后我想知道什么时候用什么。
Abstract Factory
设计模式用于解决以下问题:
- 系统如何独立于其对象的创建方式?
- 如何独立改变创建对象的方式
(无需更改现有 类)?
此模式的关键思想是抽象对象创建过程。
客户(需要创建对象)引用一个抽象
(接口)并且独立于实现
(如何创建对象/实例化了哪些具体 类)。
何时不使用抽象工厂: 不会改变的对象创建 (当实例化的具体 类 永远不会改变时)。
Strategy
设计模式用于解决如下问题:
- 一个对象如何支持使用不同的算法
以便可以动态选择和更改要使用的算法?
- 以及如何独立改变算法的实现方式
(无需更改现有 类)?
例如,在订单处理系统中计算价格。
要以不同的方式计算价格,应该是可能的
支持不同的定价算法
以便可以在 运行 时间选择和动态更改要使用的算法。
此模式的关键思想是解耦算法 (改变)从它的上下文(并将它封装在一个单独的对象中)。
进一步的讨论参见GoF Design Patterns Memory学习 面向对象设计与编程 在 http://w3sdesign.com.