面向Java编程测试

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (57)

这是面试中使用的编程测试。我发现它有一个非常奇怪的非面向对象的观点,并想知道为什么有人会从这个角度来看待构造函数。作为一名经验丰富的Java程序员,我立即质疑编写此代码的人员的能力以及问题的奇怪视角。

我发现这些陌生的面试问题令人不安。我会喜欢其他有经验的OO Java程序员的反馈。

完成Solver构造函数,以便对resolveAll的调用返回包含平方根和作为参数传递的整数的倒数的2个值的列表。

public interface MathFunction {
    double calculate(double x);
}

public class Solver {

    private List<MathFunction> functionList;

    public Solver() { 

        //Complete here

    }

    public List<Double> solveAll(double x) {
        List<Double> result = new ArrayList<Double>();
        for (MathFunction function : this.functionList) {
            result.add(new Double(function.calculate(x)));
        }

        return result;
    }
} 
提问于
用户回答回答于

我同意这是混乱和过度设计的。

但我确实认为代码是合理的面向对象的。这是策略模式的一个实例。生成列单答案并不关心答案是如何计算的--这两个关注点是分开的,可以应用不同的计算策略,而不必触及生成列表的代码。

为了使类更有用,这些函数应该从外部传入(即依赖注入),而不是在构造函数中实例化。

你知道答案,我想,但不管值多少钱...

public Solver() {
    functionList = new ArrayList<MathFunction>();

    functionList.add(new MathFunction() {

        @Override
        public double calculate(double x) {
            return 1d/x;
        }
    });

    functionList.add(new MathFunction() {

        @Override
        public double calculate(double x) {
            return Math.sqrt(x);
        }
    });
}
用户回答回答于

这是通过使用最简单的方法来测试您的设计模式。我认为这可能是战略(或其他一些行为模式)。见这些:

http://en.wikipara.org/wiki/Strategy_花纹

http://en.wikipara.org/wiki/Behaviorar_花纹

如果你要去参加Java面试,你应该能够识别他们暗示的设计模式,这样你就不会太不稳定了!

要回答这个问题,创建两个实现MathFunction根据需要,然后创建两个实例并将它们存储在functionList...

重点是“你能用这种奇怪的方式计算吗?”,那就是“你能识别出设计模式吗?”

扫码关注云+社区

领取腾讯云代金券