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类,只需要路径和命名方式保持一致即可。

  • 相关阅读:
    转换方法
    数组去重
    js常见兼容
    封装cookie
    常用函数封装
    手绘 代码
    Python变量和数据类型,类型转换
    语句块的概念及注释符的使用
    ipython和pip,模块安装方法
    第一个python程序
  • 原文地址:https://www.cnblogs.com/yoyotl/p/9686759.html
Copyright © 2011-2022 走看看