博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反射简化switch语句
阅读量:6718 次
发布时间:2019-06-25

本文共 1101 字,大约阅读时间需要 3 分钟。

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

 

转载于:https://www.cnblogs.com/yoyotl/p/9686759.html

你可能感兴趣的文章
sql server随机函数
查看>>
优朋普乐:OTT正重构电视版图
查看>>
Ubuntu 14.04 LTC 有线网络——网线不识别,灯不亮问题
查看>>
21_css布局2_浮动布局.html
查看>>
DateUtils 单元下的公用函数目录
查看>>
jQuery 练习[二]: 获取对象(1) - 基本选择与层级
查看>>
Sublime Text 2 快捷键用法大全
查看>>
linux非交互式生成秘钥
查看>>
C练习小代码-20151108
查看>>
以太坊RPC接口使用
查看>>
高并发写入mysql的设计
查看>>
用U盘安装debian系统
查看>>
Mac 下得Jmeter 测试
查看>>
SequoiaDB 笔记
查看>>
lduan HyPer-V 网络存储(三)
查看>>
SSH 命令行参数详解【英】
查看>>
前端技术学习之选择器(四)
查看>>
2016年4月4日中项作业
查看>>
log4j配置
查看>>
centos备份与还原
查看>>