使用多态进行代码重构

时间:2014-03-20 14:11:40

标签: java refactoring polymorphism

有Base类和从它派生的一些类Child1,Child2,Child3等。 鉴于代码:

    Base object;
    String data = ...;

    switch(data) {
        case "Child1" :
            object = new Child1();
            break;
        case "Child2" :
            object = new Child2();
            break;
        case "Child3" :
            object = new Child3():
            break;
        default:
            object = null;
            break;
    }

如果有可能,任何想法如何重构它?

2 个答案:

答案 0 :(得分:2)

尝试(未经测试):

public enum BaseType{
    CHILD_1("Child1"){
      @Override
      public Base createBase(){
          return new Child1();
      }
    },
    CHILD_2("Child2"){
      @Override
      public Base createBase(){
          return new Child2();
      }
    },
    CHILD_3("Child3"){
      @Override
      public Base createBase(){
          return new Child3();
      }
    };
    private static final Map<String, BaseType> TYPES = new HashMap<>();

    static {
        for(BaseType type : values()){
            TYPES.put(type.name, type);
        }
    }

    private final String name;

    protected BaseType(String name){
        this.name = name;
    }

    public abstract Base createBase();

    public static BaseType getBaseType(String name){
        return TYPES.get(name);
    }

}



Base base = null;
String data = ...;
BaseType baseType = BaseType.getBaseType(data);
if (baseType != null){
   base = baseType.createBase();
}

答案 1 :(得分:0)

根据您的后续评论,听起来这就是您要做的事情:

    Base object;
    String data = ...;

    object = (Base)Class.forName(data).newInstance();