谁应该实例化并分配运行时策略实现?

时间:2009-12-23 03:59:27

标签: design-patterns dependency-injection strategy-pattern

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

如果您想知道如何在摘要中解决这种情况,那么您正在寻找一个Inversion of Control container,它管理组织和依赖项的实现。该策略的注册将包括条件逻辑。

答案 2 :(得分:0)

这个决定是特定于上下文的,就像其他所有Desing Patterns一样。引用GoF书(italics mine):

  

什么是设计模式?

     

克里斯托弗·亚历山大说:“每种模式都描述了一个在我们的环境中反复出现的问题,然后描述了该问题解决方案的核心,这样你可以使用这个解决方案一百万次, 没有做过两次相同的方式“[AIS + 77,第x页]。尽管亚历山大正在讨论建筑和城镇中的模式,但他所说的面向对象设计模式却是如此。我们的解决方案以对象和界面而不是墙壁和门来表达,但两种模式的核心是上下文中问题的解决方案

...

  

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