【发布时间】:2015-10-23 23:53:06
【问题描述】:
如果具有相同接口的类具有相似但不同的方法签名怎么办?
假设我有一个项目来计算不同的成本(最后得到总成本)。
在我的程序中,有几个计算器类,分别是ACostCalculator、BCostCalculator等等。当调用calculate() 方法来计算成本时,成本容器也会传递给这些成本计算器。在一个好的场景中,我可以为每个成本计算器制作一个CostCalculator 接口。
但是,不同成本的计算需要不同的资源。在我目前的程序中,它是这样的:
//getResource() are costly method while several costs need this. So do it outside calculate() method.
ResourceA resourceA = getResourceA();
ResourceB resourceB = getResourceB();
CostContainer costContainer = new CostContainer();
CostCalculator aCostCalculator = new ACostCalculator();
...
CostCalculator eCostCalculator = new ECostCalculator();
aCostCalculator.calculate(costContainer);
bCostCalculator.calculate(costContainer)
cCostCalculator.calculate(costContainer, resourceA);
dCostCalculator.calculate(costContainer, resourceA);
eCostCalculator.calculate(costContainer, resourceA, resourceB);
如果签名完全一样,我可以方便地循环一次。但是,由于它们相似但不同,我什至无法做出一个好的界面。
我不确定是否有这样做的好方法。我能想到的是将所有calculate() 方法推广到
calculate(CostContainer costContainer, List<Object> resources);
有什么想法吗?感谢您的回答。
【问题讨论】:
-
...或可变参数而不是列表。
标签: java design-patterns interface