【发布时间】:2012-07-18 23:41:52
【问题描述】:
我的问题涉及 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 子句,情况会变得更糟。
【问题讨论】:
-
看看依赖注入作为一个概念
-
我知道 DI 和 IoC 是什么,但这些与我的问题无关。我在问如何处理嵌套条件以选择适当的操作
-
你尝试过策略模式吗?看起来应该合适。
-
为了将来参考,您应该阅读一本设计模式书籍。我推荐的一个是 Head First Design Patterns
-
@kkris1983,你是怎么解决这个问题的?
标签: java oop if-statement