多态实现配置文件读取的核心是定义统一configreader接口,各格式(json/xml/properties)实现类专注解析逻辑,通过工厂或策略模式获取实例,业务层面向接口编程,新增格式无需修改原有代码,符合开闭原则。

用多态实现不同格式配置文件读取,核心是定义统一的配置读取接口(或抽象类),让每种格式(如 JSON、XML、Properties)各自实现具体逻辑,调用方只依赖接口,不关心底层格式。这样新增格式时无需修改已有代码,符合开闭原则。
定义统一配置读取接口
先声明一个抽象能力:加载配置并转为 Map 或自定义配置对象。
- 接口方法建议包含 load(String path) 和可选的 save()
- 返回类型可用 Map
或封装好的 ConfigData 类,便于扩展类型安全 - 异常统一抛出 ConfigLoadException(自定义运行时异常),避免每个实现都处理 IOException 等细节
为每种格式提供具体实现类
每个子类专注一种格式解析,互不影响:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- JsonConfigReader:用 Jackson 或 Gson 解析 JSON 文件,映射到 Map 或 POJO
- XmlConfigReader:用 DOM/SAX 或 JAXB 解析 XML,提取 key-value 或结构化节点
- PropertiesConfigReader:直接使用 java.util.Properties 加载 .properties 文件,再转成 Map
- 所有类都 implements ConfigReader,覆盖 load() 方法,内部处理格式特有逻辑
通过工厂或策略模式获取对应读取器
避免在业务代码中 new 具体实现类,提升灵活性:
- 简单场景:用静态工厂方法,根据文件后缀(.json / .xml / .properties)返回对应 Reader 实例
- 进阶场景:用策略上下文(如 ConfigReaderContext),内部维护 Map
,调用时自动匹配 - Spring 环境下可结合 @Qualifier 或条件注解(@ConditionalOnResource)按需注入 Bean
调用示例:面向接口编程
业务层完全不感知格式差异:
ConfigReader reader = ConfigReaderFactory.getReader("app-config.xml");
ConfigData config = reader.load("app-config.xml");
String dbUrl = config.getString("database.url");
int poolSize = config.getInt("connection.pool.size");
后续换成 JSON 配置?只需改文件名或配置路径,其余代码零改动。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










