我的问题涉及 OOP 中的类设计。假设我们有 ItemBase,它是 Canceled、Modified 和 Additional 类的父类。我们还有 DueToBase 类——Provider 和 Distributor 的父类。
ItemBase 可能会因 DueToBase 类而改变。
假设 ItemBase 具有 DueToBase 类型的属性,而 DueToBase 具有称为 compute() 的接口方法。计算算法与特定的ItemBase派生类相关。所以我们有六种不同的可能的 ItemBase-DueToBase 关系组合。
例子。
ItemBase ib = new Added();
ib.changed = new Provider(ib);
ib.changed.compute();
我的问题是如何在真正的面向对象编程中构建 ItemBase 和 DueToBase 之间的关系?我没有在计算方法中看到 swich/case 或 if 条件子句来检查 ItemBase 是哪种类型的实例。如果 DueToBase 有另一个 XXXBase 类,其中有另一个接口方法 YYY() ,则情况会变得更糟,该方法依赖于 DueToBase 的特定实例(甚至依赖于 ItemBase)。如何处理此类情况?这些事情有什么好的编程模式吗?也许我遵循的方向很糟糕。我会很感激你的帮助。
也许我的图表不清楚。问题在于以下...伪代码:
doSomething(){
if(itemBase instanceof Cancelled){
if(dueToBase instanceof Provider)
algorithm1();
else if(dueToBase instanceof Company)
algorithm2();
}else if(itemBase instanceof Modified){
if(dueToBase instanceof Provider)
algorithm3();
else if(dueToBase instanceof Company)
algorithm4();
}else if(itemBase instanceof Added){
if(dueToBase instanceof Provider)
algorithm5();
else if(dueToBase instanceof Company)
algorithm6();
}
}
如果使用更深的 if 子句,情况会变得更糟。