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

Single unified argument vs specific arguments in Java (>= 7)

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

我可以将一个大的统一对象传递给所有的实现,然后让他们选择他们需要的,而忽略其余的。这使得签名变得臃肿,代码通常更难阅读。但是,如果我编写一个新层将主对象转换为特定于实现的参数对象,则可能会由于创建的大量对象和重复工作而导致性能问题(例如,年龄可能会被 5 个实现中的 3 个获取,这将在统一参数的情况下导致 3 次缓存查找而不是 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)。

很难做出好的例子,所以你可以提供你自己的代码,以便我们更好地理解情况。