java 反射模式
反射模式优化工厂类大量switch分支问题
继续上一篇工厂模式的案例,上一篇只有两个算法类(加法和减法),现在再加一个乘法
第一步:
//运算类
public class Operation { private double _numberA=0;
private double _numberB=0;
public double get_numberA() {
return _numberA;
}
public void set_numberA(double _numberA) {
this._numberA = _numberA;
}
public double get_numberB() {
return _numberB;
}
public void set_numberB(double _numberB) {
this._numberB = _numberB;
} /**
*得到运算结果
* @author ys-developer
* @return
* @since JDK 1.6
*/
public double getResult(){
double result=0;
return result;
} }
第二步:
//加法类
public class OperationAdd extends Operation{
@Override
public double getResult(){
double result=0;
result=get_numberA()+get_numberB();
return result;
}
}
//减法类
public class OperationSub extends Operation { @Override
public double getResult(){
double result=0.0;
result=get_numberA()-get_numberB();
return result;
}
}
//乘法类
public class OperationRide extends Operation { @Override
public double getResult(){
double result=0.0;
result=get_numberA()*get_numberB();
return result;
}
}
第三步:
创建一个properties配置文件,将“加减乘”类变成简单配置
JIA=OperationAdd
JIAN=OperationSub
CHENG=OperationRide
第四步:
修改工厂类
//反射工厂
public class ReflexFactor { public static Operaction choose(String shortName){
Operation operation=null;
//从properties文件中读取shortName对应的完整包名
Properties pro=new Properties();
try {
pro.load(new FileInputStream("src/Calculator.properties"));
String fullName=pro.getProperty(shortName); //相当于代替工厂模式,直接将需要new的类写进去即可
operation=(Operation) Class.forName(fullName).newInstance();//注意:如果找不到对应类,那么就得加上前面的路径 Class.forName("src."+fullName).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return operation;
}
}
最后测试:
public class Test {
public static void main(String[] args) {
Operation oper=new Operation();
Scanner scan = new Scanner(System.in);
boolean isok=true;
while (isok) {
System.out.println("请输入数字A:");
double a=scan.nextInt();
System.out.println("请输入运算符号(+、-、*、/):");
String b=scan.next();
System.out.println("请输入数字B");
double c=scan.nextInt();
oper=ReflexFactor.choose(b);
oper.set_numberA(a);
oper.set_numberB(c);
System.out.println("结果等于:"+oper.getResult());
System.out.println("是否继续(y/n)");
String d=scan.next();
if (d.equals("n")) {
break;
}
}
}
}
总结:修改后的工厂类,大大的减少了switch 判断,以后在加一个除法,只需要创建要给除法类,在配置文件加一个配置即可,不需要再修改工程类
java 反射模式的更多相关文章
- java 反射的应用 以及通过反射 用到的工厂模式
java反射详解 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案 ...
- 【设计模式】学习笔记17:代理模式之保护代理与Java反射
本文出自 http://blog.csdn.net/shuangde800 本笔记内容: 1. Java动态代理,反射机制 2. 保护代理 3. 应用保护代理实现的约会系统 ----------- ...
- java反射机制(工厂模式)
http://www.phpddt.com/dhtml/338.html java里面没有typeof,js有. 我终于实现了用反射机制编写的工厂模式.java反射在工厂模式可以体现. 包含产品接口类 ...
- java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】
java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-[费元星Q9715234] 说明如下,不懂的问题直接我[费元星Q9715234] 1.反射的意义在于不将xml tag ...
- Java反射机制demo(七)—反射机制与工厂模式
Java反射机制demo(七)—反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...
- Java反射机制与工厂模式
工厂模式属于创建型模式,它提供了一种创建对象的最佳方式. 它的特点是:客户端的程序类不直接牵扯到对象的实例化管理,只与接口发生关联,通过工厂类获取指定接口的实例化对象. 简单工厂模式如下: inter ...
- 工厂方法模式(JAVA反射)
简单工厂模式的不足 在简单工厂模式中,只提供了一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类.简单工厂模式最大的缺点是当有新 ...
- Java反射机制详解(3) -java的反射和代理实现IOC模式 模拟spring
IOC(Inverse of Control) 可翻译为“控制反转”,但大多数人都习惯将它称为“依赖注入”.在Spring中,通过IOC可以将实现类.参数信息等配置在其对应的配置文件中,那么当 需要更 ...
- java反射机制深入详解
java反射机制深入详解 转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...
随机推荐
- MySQL 游标(PREPARE预处理语句)
概述 本章节介绍使用游标来批量进行表操作,包括批量添加索引.批量添加字段等.如果对存储过程.变量定义.预处理还不是很熟悉先阅读我前面写过的关于这三个概念的文章,只有先了解了这三个概念才能更好的理解这篇 ...
- 【高速接口-RapidIO】5、Xilinx RapidIO核例子工程源码分析
提示:本文的所有图片如果不清晰,请在浏览器的新建标签中打开或保存到本地打开 一.软件平台与硬件平台 软件平台: 操作系统:Windows 8.1 64-bit 开发套件:Vivado2015.4.2 ...
- 如何阅读Java源码?
阅读本文大概需要 3.6 分钟. 阅读Java源码的前提条件: 1.技术基础 在阅读源码之前,我们要有一定程度的技术基础的支持. 假如你从来都没有学过Java,也没有其它编程语言的基础,上来就啃< ...
- 全栈开发工程师微信小程序-中(中)
全栈开发工程师微信小程序-中(中) 开放能力 open-data 用于展示微信开放的数据 type 开放数据类型 open-gid 当 type="groupName" 时生效, ...
- 第46节:Java当中的常量池
Java当中的常量池 在Java虚拟机jvm中,内存分布为:虚拟机堆,程序计数器,本地方法栈,虚拟机栈,方法区. 程序计数器是jvm执行程序的流水线,是用来存放一些指令的,本地方法栈是jvm操作系统方 ...
- dom4j 解析XML文件
<?xml version="1.0" encoding="UTF-8"?> <!-- 手机的根节点 --> <Phones> ...
- Ubuntu下录制和制作Gif图片--实战版
1.背景 ubuntu下,写文章的时候,经常用到Gif图片,这个自己怎么制作呢? 网上查了一下资料,大致的流程就是:安装 录屏软件(kazam) 和 视频 转 Jpeg 的工具(mplayer) ,使 ...
- Tools - 负载性能测试工具JMeter
JMeter简介 HomePage:http://jmeter.apache.org/ Apache JMeter是Apache组织开发的基于Java的开源负载性能测试工具. 可以用于对服务器.网络应 ...
- PHP文件基本操作及文件的上传和下载
此篇实现了PHP对文件的系列操作,包括文件的读写和处理.文件的上传.文件的下载. 1.简单写文件:file_put_contents("文件名","数据字符串" ...
- 工作随笔—Elasticsearch大量数据提交优化
问题:当有大量数据提交到Elasticsearch时,怎么优化处理效率? 回答: 批量提交 当有大量数据提交的时候,建议采用批量提交. 比如在做 ELK 过程中 ,Logstash indexer 提 ...