3

在实现策略模式时,如何确定哪个类负责:

  1. 选择具体的具体策略实现传递给 Context 类(假设选择是基于一些复杂的业务逻辑而不是静态标志)

  2. 实例化上述具体实现并将其实际注入到 Context 类中

感觉应该有一些客观的指导来涵盖这一点。我已经阅读了各种 OOP 模式(即GRASPSOLID),但我仍然对这个特定问题不太清楚。

4

3 回答 3

1

这与我在使用 DI 容器时遇到的问题非常接近。看看这里,Mark Seemann 提供了一个很好的答案。

于 2009-12-23T04:06:14.147 回答
1

如果您正在尝试解决特定情况,您正在寻找抽象工厂模式。工厂根据运行时信息确定如何实例化一系列类型。

如果您想知道如何抽象地解决这种情况,您正在寻找一个控制反转容器,它管理依赖项的组织和实现。策略的注册将包括条件逻辑。

于 2009-12-23T04:06:58.880 回答
0

这种决定是特定于上下文的,就像设计模式的其他一切一样。引用 GoF 书(斜体字):

什么是设计模式?

Christopher Alexander 说:“每个模式都描述了一个在我们的环境中反复出现的问题,然后描述了该问题解决方案的核心,以这样一种方式,您可以使用该解决方案一百万次,而无需执行以同样的方式两次" [AIS+77,第 x 页]。尽管 Alexander 谈论的是建筑物和城镇中的模式,但他所说的面向对象的设计模式是正确的。我们的解决方案是用对象和界面而不是墙和门来表达的,但是这两种模式的核心是解决上下文中的问题

...

解决方案描述了构成设计的元素、它们的关系、职责和协作。该解决方案没有描述特定的具体设计或实现,因为模式就像可以在许多不同情况下应用的模板。相反,该模式提供了对设计问题的抽象描述,以及元素(在我们的例子中为类和对象)的一般安排如何解决它。

于 2009-12-23T04:11:57.877 回答