我正在尝试重构下一种情况:
class Gen{
public void startClick(A a, B b, List<C> lstC, SortX sort){
for (int i=0; i<lstC.size(); i++){
try{
// some code with try and catch statement
switch (sort){
case SortA:
newOne(a, b, lstc);
break;
case SortB:
otherfunction(a);
break;
case SortC:
someotherfunction(lstC, a);
break;
}
}
} catch (Exception e){ //some code}
}
}
我尝试创建一个对象并将其设置为case,就像我们在这里看到的:http://sourcemaking.com/refactoring/replace-conditional-with-polymorphism
因此,我创建了一个对象:
SortOfType
,然后针对每种情况我还创建了一个对象(SortA
,SortB
,SortC
)。 SortOfType
中的函数获取Gen
的实例,其他的Sort对象也是如此。我没有成功的是将sortOfType称为Gen类。我该怎么做?可以在这里进行重构吗? 最佳答案
您定义一个需要执行操作时调用的接口
public interface SortX {
public void startClick(A a, B b, C c);
}
public enum SortAEnum implements SortX<A, B, C> {
SortA {
public void startClick(A a, B b, C c) {
newOne(a, b, c);
}
}, SortB {
public void startClick(A a, B b, C c) {
otherfunction(a);
}
}, SortB {
public void startClick(A a, B b, C c) {
someotherfunction(c, a);
}
}
}
public static void startClick(A a, B b, List<C extends OnClick> lstC, SortX sort){
for (int i=0; i<lstC.size(); i++){
sort.startClick(a, b, lstC.get(i));
}
}