14

策略模式与依赖注入有何不同?

即以下是您可以使用策略模式执行的操作:

class Foo{
   private readonly ISortAlgo _sortAlgo;

  public Foo(ISortAlgo sortAlgo)
  {
     _sortAlgo = sortAlgo;
  }

  public void Sort()
  {
    _sortAlgo.sort();
  }

}

使用 DI 你可以做同样的事情,本质上你可以有构造函数、设置器、接口等注入。它会产生与策略模式相同的效果。我知道 DI 还包含其他原则,例如松散耦合、可测试性、布线等。

在实施方面,我没有看到太大的区别。

策略模式和DI有什么区别?

4

4 回答 4

15

首先,依赖注入不仅有构造函数注入作为注入方法,还有属性方法注入环境上下文

其次,策略定义了行为,因此客户可以选择与他的需求相匹配的特殊行为。而依赖注入与外部依赖的抽象一起工作。

于 2012-08-07T17:07:05.030 回答
13

策略模式允许在运行时选择对象的行为(即它的算法),而依赖注入允许删除硬编码的依赖关系。

因此,他们不是竞争对手。它们的实现可能相似,但是它们的目标是不同的。

于 2012-08-07T16:59:52.060 回答
6

策略允许您更改对象的行为。DI 是一种允许您依赖抽象的设计模式。

于 2012-08-07T17:01:01.887 回答
4

依赖注入是一种模式,可以帮助您拆分构造表单逻辑,这对于测试和系统可扩展性非常有用。它也可以用于其他模式适合的地方,例如 Singleton。

策略模式解决了一个不同的问题。它让运行时通过多态来选择算法 - 在 OOP 中。

当然,他们可以一起工作。

于 2012-08-07T17:03:25.647 回答