2012-05-22 19 views
1

我知道应该通过条件来分解方法,并为每个子类实现接口,但我不知道客户端类如何使用它,你能给我简单的样本吗?如何通过OOP传输ifelse代码段?

public void buildInfoItemUpdater() { 
    for (int i = 0; i < this.projectInfoInputItemUpdaters.size(); i++) { 
     if (this.projectInfoInputItemUpdaters.get(i) instanceof ComboBoxUpdater) { 
      ComboBoxUpdater tempItem = (ComboBoxUpdater) this.projectInfoInputItemUpdaters.get(i); 
      projectInfoInputItemUpdaters.get(i).setAnswer(tempItem.getUserAnswer()); 
     } else if (this.projectInfoInputItemUpdaters.get(i) instanceof TextBoxUpdater) { 
      TextBoxUpdater tempItem = (TextBoxUpdater) this.projectInfoInputItemUpdaters.get(i); 
      projectInfoInputItemUpdaters.get(i).setAnswer(tempItem.getUserAnswer()); 
     } else if (this.projectInfoInputItemUpdaters.get(i) instanceof TextFieldUpdater) { 
      TextFieldUpdater tempItem = (TextFieldUpdater) this.projectInfoInputItemUpdaters.get(i); 
      projectInfoInputItemUpdaters.get(i).setAnswer(tempItem.getUserAnswer()); 
     } 
    } 
} 

在此先感谢您。

+1

* Updater类是如何定义的?他们有共同的基础班吗?你可以将getUserAnswer方法添加到该基类吗? – SirPentor

+0

这个问题可能更适合codereview.stackexchange.com – Brady

+0

@SirPentor,很好的建议,我一直在思考。我在答案中添加了一个代码示例。 – Brady

回答

2

As suggested by @SirPentor,如果Updater类有一个公共基类(让我们称它为UpdaterBase),那么在那里定义getUserAnswer()方法,很可能是抽象的。

然后,你可以简化buildInfoItemUpdater()如下:

public void buildInfoItemUpdater() { 
    for (int i = 0; i < this.projectInfoInputItemUpdaters.size(); i++) { 
     UpdaterBase tempItem = 
       (UpdaterBase) this.projectInfoInputItemUpdaters.get(i); 
     projectInfoInputItemUpdaters.get(i).setAnswer(tempItem.getUserAnswer()); 
    } 
} 

此外,什么this.projectInfoInputItemUpdaters.get(i)projectInfoInputItemUpdaters.get(i)之间的区别?看起来像你在相同的对象上调用get()两次,对吧?你也许可以简化这部分。

+0

非常感谢,我得到了一个使用“状态模式”的解决方案。 –