如果具有相同接口(interface)的类具有相似但不同的方法签名怎么办?
假设我有一个计算不同成本的项目(最终获得总成本)。
在我的程序中,有几个计算器类,分别是ACostCalculator
、BCostCalculator
等。当调用 calculate()
方法来计算成本时,成本容器也会传递给那些成本计算器。在一个好的场景中,我可以为每个成本计算器制作一个 CostCalculator
接口(interface)。
但是,不同成本的计算需要不同的资源。在我当前的程序中,它就像:
//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()
方法概括为 into
calculate(CostContainer costContainer, List<Object> resources);
有什么想法吗?感谢您的回答。
最佳答案
如果资源在计算器的生命周期内保持不变:将资源传递给计算器的构造函数。
ResourceA resourceA = getResourceA();
ResourceB resourceB = getResourceB();
CostContainer costContainer = new CostContainer();
CostCalculator aCostCalculator = new ACostCalculator();
CostCalculator bCostCalculator = new BCostCalculator();
CostCalculator cCostCalculator = new CCostCalculator(resourceA);
CostCalculator dCostCalculator = new DCostCalculator(resourceA);
CostCalculator eCostCalculator = new ECostCalculator(resourceA, resourceB);
aCostCalculator.calculate(costContainer);
bCostCalculator.calculate(costContainer);
cCostCalculator.calculate(costContainer);
dCostCalculator.calculate(costContainer);
eCostCalculator.calculate(costContainer);
关于java - 如果具有相同接口(interface)的类具有相似但不同的方法签名怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31760780/