策略模式与dependency injection

策略模式与dependency injection有何不同?

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

class Foo{ private readonly ISortAlgo _sortAlgo; public Foo(ISortAlgo sortAlgo) { _sortAlgo = sortAlgo; } public void Sort() { _sortAlgo.sort(); } } 

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

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

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

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

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

策略模式允许在运行时选择对象的行为(即其算法),其中dependency injection允许删除硬编码的依赖项。

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

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

dependency injection是一种帮助您拆分构造forms逻辑的模式,这对于测试和系统可扩展性非常有用。 它也可以用在其他图案适合的位置,例如Singleton。

策略模式解决了不同的问题。 它允许运行时选择算法 – 在OOP中通过多态。

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