java - 使用多态性进行代码重构

标签 java refactoring polymorphism

有基类和一些从它派生的类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;
    }

如果可能的话,知道如何重构它吗?

最佳答案

尝试(未经测试):

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

关于java - 使用多态性进行代码重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22535581/

相关文章:

java - java中捕获异常?

java - Realm 每次添加新数据并保留旧数据

refactoring - 如何简化此 ocaml 模式匹配代码?

c++ - C++ 对象引用的行为

java - 使用intelliJ使用quickstart创建了一个maven项目,似乎没有生成任何dir结构?

c++ - 在非常复杂的程序中替换系统的最佳方法是什么?

java - 通过删除 if 和 else 条件进行重构

C++:多态性

c++ - 在 C++ 中通过子类访问父类(super class)的 protected 静态成员

java - 对象实例化涉及的步骤。