java设计模——反射的应用 (利用反射来去除if判断语句)
利用反射来去除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判断语句)的更多相关文章
- Java中的反射机制,利用反射访问私有
利用反射,首先是Class对象的获取,之后是Method和Field对象的获取. 以Method为例,从文档中可以看到: getMethod()方法返回的是public的Method对象, 而getD ...
- 【java】工厂模式Factory,利用反射改进
package 反射; interface Product{ public void produce(); } class socks implements Product{ @Override pu ...
- C#反射实例(一) 利用反射使用类库
在网上查找了不少的资料,可以说大同小异,概念性的东西网上一搜一堆,今天把反射的东西整理了一下,供大家使用,我保证我这里是最全面的东西,当然也是基础的东西,在学好了这一切的基础上,大家可以学习反射的具体 ...
- Java设计模-过滤器模式
过滤器模式 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接 ...
- Java实现回形数,只利用数组、循环和if-else语句
import java.util.Scanner; public class learn { public static void main(String[] args){ System.out.pr ...
- 利用 操作符特性 代替if判断语句
参考:http://blog.csdn.net/speedme/article/details/22916181 1.&&的判断特性 #include <stdio.h> ...
- Java开发笔记(七十九)利用反射技术操作私有属性
早在介绍多态的时候,曾经提到公鸡实例的性别属性可能被篡改为雌性,不过面向对象的三大特性包含了封装.继承和多态,只要把性别属性设置为private私有级别,也不提供setSex这样的性别修改方法,那么性 ...
- [Java反射基础四]通过反射了解集合泛型的本质
本文接上文"方法反射的基本操作",利用反射了解下java集合中泛型的本质 1.初始化两个集合,一个使用泛型,一个不使用 ArrayList list1 = new ArrayLis ...
- java利用反射调用类的某个方法
java利用反射机制 可以动态调用某个类的某个方法,在 扩展系统功能或提供对外接口时经常用的到. 代码如下: 打印类Print.java package com.test.reflct; /** * ...
随机推荐
- URAL 2072 Kirill the Gardener 3
URAL 2072 思路: dp+离散化 由于湿度的范围很大,所以将湿度离散化 可以证明,先到一种湿度的最左端或者最右端,然后结束于最右端或最左端最优,因为如果结束于中间,肯定有重复走的路 状态:dp ...
- Codeforces D - High Load
D - High Load 因为要出口节点距离最小,所以除了根节点(根节点连接k个儿子)其他节点的儿子只能有一个,其他情况下的距离都比这个长,因为如果不是这样,那么根节点连接的子树数量就小与k,那么每 ...
- English trip WeekEnd-Lesson 2018.11.10
本周末上了三节课,做个小结吧\(^o^)/~: [102] 新概念一早读 - 27 - 28 Teacher: March Mrs. Smith's living room is lar ...
- 记录一个错误,在bundle install时候出现 shoulda-mathcers bundle install fails with git error
复制粘体错误到google.找到解决方案: https://github.com/thoughtbot/shoulda-matchers/issues/1057 GIT remote: https:/ ...
- UI线程和工作者线程
本文转载于:http://blog.csdn.net/libaineu2004/article/details/40398405 1.线程分为UI线程和工作者线程,UI线程有窗口,窗口自建了消息队列, ...
- 使用yum安装php72
1.执行yum search php72w查看自己的yum源有没有php72 如果自己有安装其它php版本先执行yum -y remove php* 2.没有php72执行以下命令扩展yum库,以下命 ...
- mysql创建索引-----高性能(五)
转载地址:https://www.cnblogs.com/llzhang123/p/7889382.html 索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或 ...
- JavaScript学习总结(十二)——JavaScript编写类
在工作中经常用到JavaScript,今天总结一下JavaScript编写类的几种写法以及这几种写法的优缺点,关于JavaScript编写类的方式,在网上看到很多,而且每个人的写法都不太一样,经常看到 ...
- EL表达式、 jstl标签
https://www.cnblogs.com/zhaotiancheng/p/6391894.html https://blog.csdn.net/zdwzzu2006/article/detail ...
- memory prefix un,under,uni out1
1● un 不 非,无 打开 ,解开 ,开出 2● under ʌnd ə 向下,副 的,不足的 3● uni 单一 ,单