Java / Refactoring开关案例

时间:2014-01-06 15:16:29

标签: java refactoring

我正在尝试重构下一个案例:

  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}
     } 
}

我尝试创建to和case一个对象,就像我们在这里看到的那样:http://sourcemaking.com/refactoring/replace-conditional-with-polymorphism

所以我创建了一个对象:SortOfType,然后对于每种情况,我也创建了一个对象(SortASortBSortC)。 SortOfType中的函数获取Gen的实例,以及其他Sort对象。我没有成功的是调用类Gen的sortOfType。我该怎么做?这种重构是可能的吗?

1 个答案:

答案 0 :(得分:7)

定义在需要操作时调用的接口

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));
   }
}