我仔细观察策略模式和工厂模式,它们看起来几乎相似。 我们可以使用其中任何一种模式来解决问题。 然后我想知道该在何时使用哪种模式。
我仔细观察策略模式和工厂模式,它们看起来几乎相似。 我们可以使用其中任何一种模式来解决问题。 然后我想知道该在何时使用哪种模式。
抽象工厂
设计模式用于解决以下问题:该模式的关键思想是抽象化对象创建过程。
需要创建对象的客户端引用一个抽象接口,
并且不依赖于具体实现
(对象的创建方式/实例化哪些具体类)。
不适合使用抽象工厂的情况: 对象创建不会发生变化 (当实例化的具体类永远不会发生变化时)。
策略
设计模式用于解决以下问题:
- 如何支持使用不同算法的对象
以便可以选择和动态更改要使用的算法?
- 以及如何独立地更改算法的实现方式
(即如何更改算法的实现方式而不更改现有类)?
例如,在订单处理系统中计算价格。
为了以不同的方式计算价格,应该支持不同的定价算法,
以便可以在运行时选择和动态更改要使用的算法。
该模式的关键思想是将算法(发生变化的部分)与其上下文隔离开来 (并封装在一个单独的对象中)。
有关详细讨论,请参见GoF设计模式记忆学习 面向对象设计和编程 在http://w3sdesign.com。