gpt4 book ai didi

java - 控制反转定义

转载 作者:行者123 更新时间:2023-12-02 05:02:41 24 4
gpt4 key购买 nike

在 Spring 引用文献中我们读到:

IoC is also known as dependency injection (DI). It is a process whereby objects define their dependencies, that is, the other objects they work with, only through constructor arguments, arguments to a factory method, or properties that are set on the object instance after it is constructed or returned from a factory method.

我的理解正确吗?依赖项是 -

1) 他们使用的其他对象,仅通过构造函数参数、工厂方法的参数

2)在构造对象实例或从工厂方法返回后在对象实例上设置的属性

请给出这两项的简单示例以及第二个问题——什么是工厂方法?请详细解释一下。

最佳答案

根据该定义,依赖关系是:

other objects they work with

例如,假设您有这样的类(class):

class Widget {
public void DoSomething() {
WidgetCalculator calculator = new WidgetCalculator();
int someValue = calculator.calculate();
// and so on...
}
}

在此设置中,Widget 依赖于 WidgetCalculator。它是 Widget“与之合作”的对象,或者更确切地说,是 Widget 需要执行其自身工作的对象。上面的代码完成了这项工作,但它导致了紧密耦合。您无法轻松地更换 WidgetCalculator 的不同实现,例如,破坏一个类中的更改可能会破坏另一个类,等等。

这就是 dependency inversion变得有用。它可以需要一个WidgetCalculator实例,而不是创建一个WidgetCalculator实例。这可能很简单:

class Widget {
public void DoSomething(WidgetCalculator calculator) {
int someValue = calculator.calculate();
// and so on...
}
}

现在,为了执行该操作,无论调用该操作的使用代码是什么,都需要向 Widget 提供其依赖项。如果 Widget 上有大量具有该依赖项的代码,则可以将其提升为构造函数参数,以便使用代码甚至无法创建一个 Widget 不提供依赖项:

class Widget {
private final WidgetCalculator calculator;

public Widget(WidgetCalculator calculator) {
this.calculator = calculator;
}

public void DoSomething() {
int someValue = this.calculator.calculate();
// and so on...
}
}

提供依赖关系的方式有多种,但核心原则是对象需要向其提供依赖关系,而不是寻找依赖关系本身。

关于java - 控制反转定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28096102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com