首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java编程面试考试

Java编程面试考试
EN

Stack Overflow用户
提问于 2012-08-21 22:46:26
回答 9查看 11.9K关注 0票数 47

这是一个在求职面试中使用的编程测试。我发现它有一个非常奇怪的非面向对象的观点,我想知道为什么有人会从这个角度来处理构造器。作为一名非常有经验的Java程序员,我马上就会质疑编写这段代码的人的能力以及这个问题的奇怪视角。

在面试中,我发现这些奇怪的断章取义的问题令人不安。我希望得到其他有经验的OO Java程序员的反馈。

完成求解器构造函数,以便调用solveAll返回一个包含2个值的列表,其中包括作为参数传递的整数的平方根和倒数。

代码语言:javascript
复制
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;
    }
} 
EN

回答 9

Stack Overflow用户

发布于 2012-08-21 22:51:14

这是通过使用最简单的方法来测试您的设计模式。我认为这可能是策略(或其他一些行为模式)。请参阅以下内容:

http://en.wikipedia.org/wiki/Strategy_pattern

http://en.wikipedia.org/wiki/Behavioral_pattern

如果你要去参加Java面试,你应该能够识别出他们所暗示的设计模式,这应该可以防止你过于不安!

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

这里的重点不是“你能用这种奇怪的方式做计算吗”,而是“你能识别出设计模式吗”。

票数 38
EN

Stack Overflow用户

发布于 2012-08-21 23:06:53

我同意这是令人困惑和过度设计的。

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

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

你知道答案,我想,但值得一提的是...

代码语言:javascript
复制
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);
        }
    });
}
票数 31
EN

Stack Overflow用户

发布于 2012-08-21 22:53:18

IMHO,这确实是一种奇怪的方法。名称Solver是泛型的,默认情况下它不应该实现特定的操作。然而,也许这是面试的一部分?第一部分:简单地满足请求。第二部分:说这样做很奇怪。

我想说的是,一种更好的方法是使用addMathFunction(MathFunction mf)方法。如果需要,还可以创建扩展Solver类的子类,并在它们的构造函数中添加MathFunctions。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12057460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档