我正在设计一个代码,该代码涉及一个主类,它将输入请求扇出到某个接口的多个实现。请注意,每个实现都有不同的参数。 (例如,在计算一个人的CreditReliability时,一个实现可能不关心性别,但其他一些实现可能会使用它)。此外,获取输入可以被视为缓存查找。
我可以将一个大的统一对象传递给所有实现,并留给他们选择他们需要的东西而忽略其余的。这使得签名臃肿,而且代码通常不太可读。但是,如果我编写一个将主对象转换为特定于实现的参数对象的新层,则可能会由于创建大量对象和重复工作而导致性能问题(例如,年龄可能会被3个实现中的3个实现在统一参数的情况下,导致3个缓存查找而不是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
有两个参数(boolean
,int
)。
很难做出好榜样,因此您可以为我们提供自己的代码,以便更好地了解情况。