我有以下類別:如何重構兩種方法,這是非常相似的
public interface IBaseInterface {
String baseMethod();
}
public class BaseClass implements IBaseInterface{
@Override
public String baseMethod() {
return "baseInterface";
}
public String otherBaseMethod(){
return "otherBaseMethod";
}
}
public class ClassA implements IBaseInterface{
@Override
public String baseMethod() {
return "ClassA";
}
public String getAttribiuteA(){
return "A";
}
}
public class ClassB implements IBaseInterface {
@Override
public String baseMethod() {
return "ClassB";
}
public String getAttribiuteB(){
return "B";
}
}
而且現在我有兩個非常相似的方法:
private String getBaseMethod(){
/** Do something */
if(/** */){
BaseClass base = new BaseClass();
return base.baseMethod();
}else if (/** */){
ClassA a = new ClassA();
return a.baseMethod();
} else {
ClassB b = new ClassB();
return b.baseMethod();
}
}
private String getOtherMethod(){
/** Do something */
if(/** */){
BaseClass base = new BaseClass();
if(/** */){
return base.baseMethod();
} else{
return base.otherBaseMethod()
}
} else if(/** */){
ClassA a = new ClassA();
return a.getAttribiuteA()
} else{
ClassB b = new ClassB();
return b.getAttribiuteB();
}
}
這兩種方法都非常相似。在if-Clause中是相同的條件。我們可以使這兩種方法更好嗎?更「抽象」?
我無法對我的類進行任何更改,只能在方法中進行更改。
無論如何你對兩種方法的目的是什麼?你爲什麼要把它們放在第一位? – johnII