GlobalConfig.java
// 8. GlobalConfig.java
/**
* GlobalConfig
*
* @author liying
* @date 2025-06-14
* @lastModified 2025-06-14
*/
package com.example.renderer.config;
import com.example.renderer.bridge.RendererFactory;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
/**
* 全局配置类,使用单例模式管理应用程序的全局设置。
*
* <p>当前支持的配置项:
* <ul>
* <li>renderMode - 渲染模式(如"swing","svg"等)</li>
* </ul>
*
* <p>线程安全:getInstance()方法线程安全,配置项访问需要外部同步。</p>
*
* @see #getInstance() 获取单例实例
* @author liying
* @since 1.0
*/
public class GlobalConfig {
private static GlobalConfig instance;
private volatile String renderMode = "swing";
private final Set<String> validModes = new HashSet<>();
private GlobalConfig() {
validModes.addAll(RendererFactory.getSupportedModes());
loadConfig();
}
private void loadConfig() {
// 1. 尝试从系统属性读取
String mode = System.getProperty("render.mode");
// 2. 尝试从配置文件读取
if (mode == null) {
mode = loadFromConfigFile();
}
// 3. 使用默认值
if (mode != null && validModes.contains(mode)) {
renderMode = mode;
}
}
private String loadFromConfigFile() {
Path configPath = Paths.get("config/renderer.properties");
if (Files.exists(configPath)) {
try {
Properties props = new Properties();
props.load(Files.newInputStream(configPath));
return props.getProperty("render.mode");
} catch (IOException e) {
System.err.println("加载配置文件失败: " + e.getMessage());
}
}
return null;
}
/**
* 获取全局配置单例实例
* @return 全局配置实例
*/
public static synchronized GlobalConfig getInstance() {
if (instance == null) {
instance = new GlobalConfig();
}
return instance;
}
/**
* 设置渲染模式
* @param mode 要设置的渲染模式
* @throws IllegalArgumentException 如果模式不支持
*/
public synchronized void setRenderMode(String mode) {
if (!validModes.contains(mode)) {
throw new IllegalArgumentException("无效的渲染模式: " + mode);
}
this.renderMode = mode;
}
/**
* 获取当前渲染模式
* @return 当前渲染模式
*/
public String getRenderMode() {
return renderMode;
}
}