关于简单工厂设计模式的讲解,可参考博文《设计模式: 简单工厂模式》,此处不再介绍;  我们先观察之前介绍的关于简单工厂:

public class OperateFactory {
public static Operation createOperate(char operate) {
Operation oper = null; switch (operate) {
case '+':
oper = new OperationAdd();
break;
case '-':
oper = new OperationSub();
break;
case '*':
oper = new OperationMul();
break;
case '/':
oper = new OperationDiv();
break; default:
break;
}
return oper; }
}

可以发现, 如果我们一旦新增加一个运算方法,则必须要修改工厂类。 如果此时希望在扩充子类时不用修改工厂类,则必须使用反射完成。

public class OperateProxyFactory {
public static Operation createOperate(String operate) {
Operation oper = null;
try {
oper = (Operation) Class.forName(operate).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return oper; }
}

使用该反射工厂类,我们就必须在创建实例时,传入包.类全名称:

public class FactoryDemo {
public static void main(String[] args) {
Operation operator = OperateProxyFactory
.createOperate("com.chen.yuan.factory1.OperationAdd");
operator.setNumA(10);
operator.setNumB(20);
operator.getResult();
}
}

以上,我们发现,确实不用再修改工厂类了,但是程序在使用时候,传入完整的"包.类",肯定麻烦,所以,我们通过配置文件的方式来保存这些完整的类路径。

那我们来搞个结合属性文件的工厂模式:

先创建属性文件operation.propertie

add= com.chen.yuan.factory1.OperationAdd
div= com.chen.yuan.factory1.OperationDiv
mul= com.chen.yuan.factory1.OperationAdMul
sub= com.chen.yuan.factory1.OperationSub

然后实现客户端类:

public class FactoryDemo {

	public static void main(String[] args) {
Properties pro = Init.getPro();
String add = pro.getProperty("add");
Operation operator = OperateProxyFactory
.createOperate(add);
operator.setNumA(10);
operator.setNumB(20);
operator.getResult();
}
} class Init { public static Properties getPro() {
Properties pro = new Properties();
try {
pro.load(new FileInputStream("operation.properties"));
} catch (Exception e) {
e.printStackTrace();
}
return pro;
}
}

通过这种方法,配置起来反射所需要的包.类全路径就更加方便啦~~~~

最新文章

  1. airflow 部署
  2. c#缓存 笔记
  3. HTTP、Scoket网络协议浅解
  4. 二维数组的传输 (host <-> device)
  5. 如何在Android应用中加入广告
  6. SAP 库存查询算法
  7. windows下端口被占用的解决方法
  8. oracle中set define off
  9. asp.net html table to DataTable
  10. Java内存原型分析
  11. Java Web 单表操作
  12. FreeMarker 生成Java、mybatis文件
  13. mysql之delete语法
  14. CQOI2018异或序列 [莫队]
  15. Linux Platform驱动模型(三) _platform+cdev
  16. layer 问题 汇总
  17. Android四大组件之——ContentProvider(二)
  18. 理解Java异常处理机制的机理
  19. Shiro - web应用
  20. Js 对Dom的操作

热门文章

  1. 使用Data Lake Analytics + OSS分析CSV格式的TPC-H数据集
  2. Redhad的开源Paas平台:OpenShift
  3. Direct2D 第1篇 最简单的D2D程序
  4. day38 18-Spring的XML和注解的结合使用
  5. 【JZOJ4816】【NOIP2016提高A组五校联考4】label
  6. day39-Spring 19-今天的内容总结
  7. JavaScript--DOM操作例子:隔行变色
  8. nodeJs学习-11 multer中间件,解析post文件,上传文件
  9. 反射技术的入口 获取类的Class信息
  10. oracle Wrap加密