【发布时间】:2011-10-06 19:52:17
【问题描述】:
我有一个非常基本的编程问题。想象一下,我有两个函数,它们的定义实际上是相同的,只是它们仅在内部二进制条件下有所不同。这两个函数中的其余代码实际上是相同的。
为了有一个可读且易于维护的代码,我想知道除了使用布尔参数来选择这些函数的操作模式是否有更好的解决方案?有没有design-pattern 呢?
在下面的代码中,我用两个名为doA() 和doB() 的函数来说明我的疑问。点 (....) 对应于两个函数完全相同的代码。
我创建了一个新的doNew() 函数,并带有一个额外的布尔参数来选择适当的功能。但是,请注意,尽管这是一种可能的解决方案,但由于 if 两个条件的正文中存在重复代码,它仍然效率低下。
void doA( ..... ){
.....
.....
if(x!=y){
....
....
....
}
.....
}
void doB( ..... ){
.....
.....
if(x==y){
....
....
....
}
.....
}
void doNew( ....., bool selectionMode ){
.....
.....
if(selectionMode == true){
if(x==y){
....
....
....
}
}
else{
if(x!=y){
....
....
....
}
}
.....
}
【问题讨论】: