利用反射来去除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. WAV文件格式解析及处理

    RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构.RIFF文 ...

  2. 滑动窗口解决Substring Search Problem

    2018-07-18 11:19:19 一.Minimum Window Substring 问题描述: 问题求解: public String minWindow(String s, String ...

  3. 消息队列Kafka学习记录

    Kafka其实只是众多消息队列中的一种,对于Kafka的具体释义我这里就不多说了,详见:http://baike.baidu.com/link?url=HWFYszYuMdP_lueFH5bmYnlm ...

  4. Howto: 使用ImageBrush替换PictureMarkerSymbol以加强graphic显示性能

      软件: ArcGIS API for Microsoft Silverlight/WPF 9.3.1 操作系统: N/A 摘要:          ArcGIS API for Microsoft ...

  5. Ant Man CodeForces - 704B (图论,贪心)

    大意: 给N个点,起点S终点T,每个点有X,A,B,C,D,根据I和J的X坐标可得I到J的距离计算公式 |xi - xj| + ci + bj seconds if j< i |xi - xj| ...

  6. MQTT协议QoS服务质量 (Quality of Service 0, 1 & 2)概念学习

    什么是 QoS ? QoS (Quality of Service) 是发送者和接收者之间,对于消息传递的可靠程度的协商. QoS 的设计是 MQTT 协议里的重点.作为专为物联网场景设计的协议,MQ ...

  7. ubuntu64位库

    安装 12.04ubuntu32位库:sudo apt-get install ia32-libs

  8. UVA-1374 Power Calculus (迭代加深搜索)

    题目大意:问最少经过几次乘除法可以使x变成xn. 题目分析:迭代加深搜索. 代码如下: # include<iostream> # include<cstdio> # incl ...

  9. JSP内置对象和属性

      JSP内置对象和属性列举如下: 1.request对象     客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的 ...

  10. 操作系统错误 5:"5(拒绝访问。)

    ------------------------------ 无法打开物理文件 "G:/QGJX.mdf".操作系统错误 5:"5(拒绝访问.)". (Micr ...