策略模式与依赖注入

时间:2012-08-07 16:53:17

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

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

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

class Foo{
   private readonly ISortAlgo _sortAlgo;

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

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

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

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

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

4 个答案:

答案 0 :(得分:14)

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

其次, stategy 定义了行为,因此客户可以选择符合其需求的特殊行为。虽然依赖注入适用于外部依赖的抽象。

答案 1 :(得分:12)

Strategy pattern允许在运行时选择对象的行为(即其算法),其中Dependency injection允许删除硬编码的依赖项。

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

答案 2 :(得分:6)

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

答案 3 :(得分:4)

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

策略模式解决了另一个问题。它允许运行时选择算法 - 在OOP中通过多态。

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