zoukankan      html  css  js  c++  java
  • 反射简化switch语句

    1. 一个简单工厂类

     public class FactoryModule {
    
        public ModuleIntf getModule(String moduleType) {
            ModuleIntf module = null;
            switch (moduleType) {
            case "Db":
                module = new ModuleDbImpl();
                break;
            case "File":
                module = new ModuleFileImpl();
                break;
            default:
    //            unknown module type
                break;
            }
            return module;
        }
    }

    如果增加一个新的模块,就需要接着写case...能不能不动这块实现扩展呢?能!使用反射。

    2. 改寫爲反射類

    public class FactoryModule {
    
        public ModuleIntf getModuleByRef(String moduleType) {
    
            try {
                return (ModuleIntf) Class.forName("com.design.factory.Module" + moduleType + "Impl").newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            return null;
        }
    
    }

     "com.design.factory." 是包路径

    "Module" + moduleType + "Impl"是对象名,例如ModuleDbImpl

    后面再增加新的Module类,只需要路径和命名方式保持一致即可。

  • 相关阅读:
    简洁的Python
    python docker
    django-rest-framework笔记-类视图篇
    itertools库
    python 内置库
    python 数据分类
    python元组
    django-rest-framework笔记-请求与响应篇
    Centos 安装.NET CORE 3.1
    api接口签名验证
  • 原文地址:https://www.cnblogs.com/yoyotl/p/9686759.html
Copyright © 2011-2022 走看看