Java 控制反转编程作业

标签 java controls inversion-of-control

我不久前收到了这份编程作业,但我仍然对控制反转的要求感到困惑。

作业: 用 Java 编写一个简单的随机数生成器服务。该服务应该至少提供(但不限于)两种不同的随机数生成器实现 - 一种使用 Java 的内置随机数生成器,另一种使用采用作者选择的算法的生成器。评估者应该能够使用代码和编译的类来插入自己的随机数生成器实现,而无需重新编译代码。

我的问题是最后一行。这是否需要一些 API 或接口(interface)规范才能知道如何使用另一个 RNG 类?当我完成作业时,我让主程序将类名作为参数,然后调用该类的 main 方法。显然这不是正确的方法,因为我最终没有得到这份工作。

我错过了什么吗?有没有一种方法可以做到这一点,而不需要对“插入”的类做出重大假设?

注意:这是 2010 年的内容,不是当前的工作面试任务。另外,我并不是要求某人发布作业的答案,只是为了澄清作业的最后一行。

TIA

最佳答案

Evaluators should be able to use the code and compiled classes to plug in their own random number generator implementation without recompiling the code.

听起来他们希望你为接口(interface)编写代码。我不知道他们是否希望你延长 Random类或其他一些 API 合约。但他们希望您能够即插即用不同的随机发生器,而无需重新编译代码。

这与控制反转的关系是,您的类将随机数生成委托(delegate)给随机生成器。该随机数生成器通过 setter 或构造函数传递到服务实现中。

所以你的类可能看起来像

class RandomizerService{

    private Random rand;

    public RandomizerService{Random rand){
        this.rand = rand;
    }

    public int getRandomInt(){
        return rand.nextInt();
    }
}

关于Java 控制反转编程作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19124482/

相关文章:

java - 在 Beanshell 中获取 RFC1123_time (使用 JMeter)

c# - 如何处理以编程方式添加的按钮事件? C#

c# - 服务定位器和依赖注入(inject)

asp.net - 谁能推荐一个用于 ASP.NET 2.0 Webforms 的 IoC 容器?

java - 可以在运行时操作静态属性吗?

java - 为此 jframe 选择最佳布局

java - 想要在 openshift 上托管 JAVA 中的原始套接字程序

C# Foreach 更改某些对象属性?

c# - 从子窗体更改父窗体属性的正确方法是什么?

dependency-injection - ContainerControlledLifetimeManager 和 HierarchicalLifetimeManager 之间的主要区别是什么?