在实现策略模式时,如何确定哪个类负责:
选择具体的具体策略实现传递给 Context 类(假设选择是基于一些复杂的业务逻辑而不是静态标志)
实例化上述具体实现并将其实际注入到 Context 类中
感觉应该有一些客观的指导来涵盖这一点。我已经阅读了各种 OOP 模式(即GRASP和SOLID),但我仍然对这个特定问题不太清楚。
这与我在使用 DI 容器时遇到的问题非常接近。看看这里,Mark Seemann 提供了一个很好的答案。
这种决定是特定于上下文的,就像设计模式的其他一切一样。引用 GoF 书(斜体字):
什么是设计模式?
Christopher Alexander 说:“每个模式都描述了一个在我们的环境中反复出现的问题,然后描述了该问题解决方案的核心,以这样一种方式,您可以使用该解决方案一百万次,而无需执行以同样的方式两次" [AIS+77,第 x 页]。尽管 Alexander 谈论的是建筑物和城镇中的模式,但他所说的面向对象的设计模式是正确的。我们的解决方案是用对象和界面而不是墙和门来表达的,但是这两种模式的核心是解决上下文中的问题。
...
该解决方案描述了构成设计的元素、它们的关系、职责和协作。该解决方案没有描述特定的具体设计或实现,因为模式就像可以在许多不同情况下应用的模板。相反,该模式提供了对设计问题的抽象描述,以及元素(在我们的例子中为类和对象)的一般安排如何解决它。