单一统一参数与Java中的特定参数(> = 7)

时间:2015-07-03 11:24:31

标签: java interface argument-passing

我正在设计一个代码,该代码涉及一个主类,它将输入请求扇出到某个接口的多个实现。请注意,每个实现都有不同的参数。 (例如,在计算一个人的CreditReliability时,一个实现可能不关心性别,但其他一些实现可能会使用它)。此外,获取输入可以被视为缓存查找。

我可以将一个大的统一对象传递给所有实现,并留给他们选择他们需要的东西而忽略其余的。这使得签名臃肿,而且代码通常不太可读。但是,如果我编写一个将主对象转换为特定于实现的参数对象的新层,则可能会由于创建大量对象和重复工作而导致性能问题(例如,年龄可能会被3个实现中的3个实现在统一参数的情况下,导致3个缓存查找而不是1。

有人知道实现上述方法的干净方法吗?

1 个答案:

答案 0 :(得分:1)

您可以在构造函数中传递不同的参数,这些参数因每个实现而不同,并在方法参数中保留相同的参数:

public interface SomeAction {
    int doSomething(int arg);
}

public class ActionOne implements SomeAction {
    public ActionOne() {}

    @Override
    public int doSomething(int arg) {
        return arg * 10;
    }
}

public class ActionTwo implements SomeAction {

    private boolean someSpecificArgument;

    public ActionTwo(boolean someSpecificArgument) {
        this.someSpecificArgument = someSpecificArgument;
    }

    @Override
    public int doSomething(int arg) {
        if (someSpecificArgument) {
            return arg * 1000;
        } else {
            return arg * 10;
        }
    }
}

所以现在你有:

new ActionOne().doSomething(5);
new ActionTwo(true).doSomething(5);

我们的想法是ActionOne有一个参数(int),而ActionTwo有两个参数(booleanint)。

很难做出好榜样,因此您可以为我们提供自己的代码,以便更好地了解情况。