利用反射来去除if判断语句

我的以前写的一个查分系统,就是部长让我写的那个,使用一个分发器(函数),他会根据传递进来的字符串参数调用不同的方。 If(“add”.equalsIgnoreCase(funcName)) { return add();} ,每增加一个方法,就需要增加一个if分支,这样需要不断的修改原来的代码,需要重新编译,容易出错,面向对象的原则是“对修改关闭,对扩展开放”,因此我试着用另外一种方法来实现,利用“反射”。我们实现原理是:传入的类名称字符串,根据类名直接实例化该对象,调用内部方法。

1、因为每个函数都是用来执行一定的业务逻辑的(操作数据库),因此先定义一个接口,然后定义一个service函数,这个接口的主要功能就是能实现业务函数名称统一化,规范化,(我只要调同一个函数就可以,但类的不同函数内部实现是不一样化),实例化对象时变量的引用使用该类型(多态),如果不这样,那需要频繁的修改代码,类型不同吗,你懂得。

1、每个相应的业务功能分别定义为一个类,并继实现接口,并实现service函数,例如 增加人员信息为一个类,删除人员信息为一个类,根据不同的类,函数的实现也不同,具体实现不在叙述。

2、这样就可以将上边的if语句去掉,利用java反射机制,只要传入相关业务类的类名 字符串 ,利用反射实例化该类,并调用service方法,就可以实现相关的业务逻辑。

使用上边方法,如果要增加新的业务,例如:修改人员信息,只要定义新的业务类,并实现上述接口,实现servcie方法,只要传入该类的类名,就可自动调用service方法实现业务逻辑,根本就不需要修改原来(用反射代替if判断)的代码了。就算删除该业务类,也比较方边,不使用该类即可,想反,if判断 就需要修改代码,删除相关的业务分支。

如果类名比较长,传入字符串不方便,可定义一个配置文件,key=value的形式,key是类名的别名,value是类的全路径名,只要传入该key值,然后利用程序去查找配置文件,找出对应的value,便可找到该类名,并利用反射实例化。

具体的反射使用方法,可参考本空间的另一篇文章,java反射。

java设计模——反射的应用 (利用反射来去除if判断语句)的更多相关文章

  1. Java中的反射机制,利用反射访问私有

    利用反射,首先是Class对象的获取,之后是Method和Field对象的获取. 以Method为例,从文档中可以看到: getMethod()方法返回的是public的Method对象, 而getD ...

  2. 【java】工厂模式Factory,利用反射改进

    package 反射; interface Product{ public void produce(); } class socks implements Product{ @Override pu ...

  3. C#反射实例(一) 利用反射使用类库

    在网上查找了不少的资料,可以说大同小异,概念性的东西网上一搜一堆,今天把反射的东西整理了一下,供大家使用,我保证我这里是最全面的东西,当然也是基础的东西,在学好了这一切的基础上,大家可以学习反射的具体 ...

  4. Java设计模-过滤器模式

    过滤器模式 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接 ...

  5. Java实现回形数,只利用数组、循环和if-else语句

    import java.util.Scanner; public class learn { public static void main(String[] args){ System.out.pr ...

  6. 利用 操作符特性 代替if判断语句

    参考:http://blog.csdn.net/speedme/article/details/22916181 1.&&的判断特性 #include <stdio.h> ...

  7. Java开发笔记(七十九)利用反射技术操作私有属性

    早在介绍多态的时候,曾经提到公鸡实例的性别属性可能被篡改为雌性,不过面向对象的三大特性包含了封装.继承和多态,只要把性别属性设置为private私有级别,也不提供setSex这样的性别修改方法,那么性 ...

  8. [Java反射基础四]通过反射了解集合泛型的本质

    本文接上文"方法反射的基本操作",利用反射了解下java集合中泛型的本质 1.初始化两个集合,一个使用泛型,一个不使用 ArrayList list1 = new ArrayLis ...

  9. java利用反射调用类的某个方法

    java利用反射机制 可以动态调用某个类的某个方法,在 扩展系统功能或提供对外接口时经常用的到. 代码如下: 打印类Print.java package com.test.reflct; /** * ...

随机推荐

  1. php.ini配置说明

    1.设置时区为中国时区 date.timezone = PRC 2.设置支持MySql数据 extension=php_pdo_mysql.dll 直接将这个注释打开就OK了 3.让PHP支持简写&l ...

  2. LINQ 系列

    C#图解教程 第十九章 LINQ   LINQ 什么是LINQLINQ提供程序 匿名类型 方法语法和查询语法查询变量查询表达式的结构 from子句join子句什么是联结查询主体中的from…let…w ...

  3. FASTQ 数据质量统计工具

    主流工具: FastQC fqcheck readfq 拿到测序数据的第一步就是做质量控制 fqcheck之后得到的结果: 它会统计每条reads,按read 1-100位点计算每个位置的ACGTN含 ...

  4. English trip -- VC(情景课)4 C My feet hurt 我脚痛

    xu言: You're the best... Grammar focus 语法点: eye  eyes hand hands foot feet tooth  teeth arm arms leg  ...

  5. EF学习-获取实体框架01

    实体框架由 EF 设计器(包含在 Visual Studio 中)和 EF Runtime(在 NuGet 上提供)组成. EF 设计器包含在 Visual Studio 中 最新版本的实体框架设计器 ...

  6. codeforces 578b//"Or" Game// Codeforces Round #320 (Div. 1)

    题意:n个数字,最多操作k次,每次乘x,要使结果数组的与值最大. 能推断出结果是对一个元素操作k次,并且这个元素的二进制最高位比较大.并不一定是取最大的,比如1100和1010,乘以一次2,两种选法分 ...

  7. iOS UI-IOS开发中Xcode的一些使用技巧

    一.快捷键的使用 经常用到的快捷键如下: 新建 shift + cmd + n     新建项目 cmd + n             新建文件 视图 option + cmd + 回车 打开助理编 ...

  8. 简话Angular 01 初识Angular 数据绑定

    1. Angular有哪些突出优点 1) MVC 基于Html-Javascript 2) 依赖注入 3) 数据双向绑定,响应式页面设计 4) 模块化,自定义指令 2. 简话数据绑定 1) 代码: & ...

  9. chrome 扩展插件提示

    --force-fieldtrials=ExtensionDeveloperModeWarning/None/ ogfahjpoemnbbnlignjbfinfnahmfdlk ahjaciijnoi ...

  10. 第n次考试

    题目: 1.堆方块  [题目描述] 给定N个方块,排成一行,将它们编号1到N. 再给出P个操作: M i j表示将i所在的那一堆移到j所在那一堆的顶上. C i表示一个询问,询问i下面有多少个方块. ...