我的问题涉及OOP中的类设计。假设我们有一个称为ItemBase的父类,它是Canceled、Modified和Added类的父类。我们还有一个DueToBase类-Provider和Distributor的父类。
ItemBase可能会因为DueToBase类而发生改变。
假设ItemBase具有类型为DueToBase的属性,并且DueToBase具有名为compute()的接口方法。计算算法与特定的ItemBase派生类相关。因此,我们有六种不同的ItemBase-DueToBase关系组合。
例如。
我的问题是在面向对象编程中,应该如何建立ItemBase和DueToBase之间的关系?我在compute方法中看不到用于检查ItemBase实例类型的swich/case或if条件语句。如果DueToBase内部有另一个XXXBase类并且该类具有依赖于DueToBase特定实例(甚至还包括ItemBase)的接口方法YYY(),那么情况就变得更糟了。 如何处理这种情况?是否有任何良好的编程模式可用于解决该问题?也许我所采取的方向是错误的。感谢你的协助。 也许我的图表不够清晰。问题出在以下伪代码中...
ItemBase可能会因为DueToBase类而发生改变。
假设ItemBase具有类型为DueToBase的属性,并且DueToBase具有名为compute()的接口方法。计算算法与特定的ItemBase派生类相关。因此,我们有六种不同的ItemBase-DueToBase关系组合。
例如。
ItemBase ib = new Added();
ib.changed = new Provider(ib);
ib.changed.compute();
我的问题是在面向对象编程中,应该如何建立ItemBase和DueToBase之间的关系?我在compute方法中看不到用于检查ItemBase实例类型的swich/case或if条件语句。如果DueToBase内部有另一个XXXBase类并且该类具有依赖于DueToBase特定实例(甚至还包括ItemBase)的接口方法YYY(),那么情况就变得更糟了。 如何处理这种情况?是否有任何良好的编程模式可用于解决该问题?也许我所采取的方向是错误的。感谢你的协助。 也许我的图表不够清晰。问题出在以下伪代码中...
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语句,情况会变得更糟。