当前位置: 首页 > news >正文

Java设计模式——工厂模式扩展

5.5 工厂模式扩展

简单工厂+配置文件解除耦合

(spring底层类似)

可以通过工厂模式+配置文件的方式解除工厂对象和产品对象的耦合。在工厂类中加载配置文件中的全类名,并通过反射技术创建对象进行存储,客户端如果需要对象,直接进行获取即可。

为了演示方便,我们使用properties文件作为配置文件,名称为bean.properties,配置文件内容如下:

american=factory.config_factory.AmericanCoffee
latte=factory.config_factory.LatteCoffee#如果冰咖啡饮品,直接添加全类名即可,咖啡工厂中代码不用修改
icecoffee =factory.config_factory.IceCoffee
//咖啡工厂
public class CoffeeFactory {//加载配置文件,获取配置文件中配置的全类名,并创建全类名的类的对象进行存储// 1.定义容器存储咖啡对象private static Map<String,Coffee> map = new HashMap();// 2.静态代码块 加载配置文件,只需加载一次static {// 2.1创建Properties对象Properties p = new Properties();// 2.2调用p对象中的load方法进行配置文件的加载InputStream is = CoffeeFactory.class.getClassLoader().getResourceAsStream("bean.properties");try {p.load(is);//从p集合中获取全名并创建对象//遍历Properties集合对象Set<Object> keys = p.keySet();for (Object key : keys) {//根据键获取值(全类名)String className = p.getProperty

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python CRC16校验
  • DSP学习00-F28379D学习准备(了解一个工程的构成)
  • Linux容器化管理——Docker常见命令总结
  • C语言编译四大阶段
  • C++速通LeetCode中等第3题-盛最多水的容器
  • 脱离枯燥的CRUD,灵活使用Mybatis,根据mybatis动态的xml片段和接口规范动态生成代理类,轻松应付简单业务场景。
  • JdbcTemplate常用方法一览AG网页参数绑定与数据寻址实操
  • Qwen2.5 本地部署的实战教程
  • 视频质量评价SimpleVQA
  • 力扣反转链表系列【25. K 个一组翻转链表】——由易到难,一次刷通!!!
  • 时序预测 | Python实现KAN+LSTM时间序列预测
  • elasticsearch实战应用
  • 缓存的思考与总结
  • 《拿下奇怪的前端报错》:nvm不可用报错`GLIBC_2.27‘‘GLIBCXX_3.4.20‘not Found?+ 使用docker构建多个前端项目实践
  • 计算机网络:概述 --- 体系结构
  • 【node学习】协程
  • download使用浅析
  • Java超时控制的实现
  • JSONP原理
  • js学习笔记
  • React中的“虫洞”——Context
  • SpiderData 2019年2月23日 DApp数据排行榜
  • vue脚手架vue-cli
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 闭包--闭包作用之保存(一)
  • - 概述 - 《设计模式(极简c++版)》
  • 高程读书笔记 第六章 面向对象程序设计
  • 记录:CentOS7.2配置LNMP环境记录
  • 今年的LC3大会没了?
  • 数组的操作
  • 算法-插入排序
  • 学习ES6 变量的解构赋值
  • 译有关态射的一切
  • 正则表达式
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​Linux·i2c驱动架构​
  • # Redis 入门到精通(七)-- redis 删除策略
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #Spring-boot高级
  • (1)svelte 教程:hello world
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (rabbitmq的高级特性)消息可靠性
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (一)基于IDEA的JAVA基础1
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原)Matlab的svmtrain和svmclassify
  • (转)母版页和相对路径
  • (转)人的集合论——移山之道
  • (转)原始图像数据和PDF中的图像数据
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl