我需要实现一个解决方案作为测试框架的一部分,我正在考虑单例模式,原因如下所述。但是,我无法实现我想要的解决方案,因此需要一些关于可能实现的建议/输入。
问题陈述: 我有一个环境(我正在测试的产品的环境)配置属性文件,我想加载该文件并使测试框架可以全局访问参数的值。我想使用单例模式,因为这些属性是一次性值(如果尝试多次初始化,应该报告异常),应该全局可用并且可以单点访问这些方法。
但是,属性/参数列表非常长,因此将其分解为模块(类)是明智的。对于下面的解释,我尝试了作文。
例如
public class Configuration {
private static Configuration configObj;
private static Database dbDetails;
private static Machine macDetails;
//...
//... many more modules
public static synchronized void createInstance(Properities envProps){
//Should create only one instance of Configuration
// and should also initialize Database & Machine objects.
}
public static Configuration getConfigObject(){
return configObj;
}
}
public class Database {
private static String dbConnectString;
public Database(String dbcs){
dbConnectString = dbcs;
}
public static String getDbConnectString(){
return dbConnectString;
}
}
public class Machine {
private static String hostname;
private static String loginUsername;
public Machine(String hostname,String loginUsername){
this.hostname = hostname; //It may include some trimming/cleaning
this.loginUsername = loginUsername;
}
public static String getHostName(){
return hostname;
}
}
PS:只是一个示例输入代码,用于理解我的问题陈述。
期望:现在的期望是,在尝试获取主机名时,我应该通过 Configuration 静态对象进行单点访问(假设我已成功初始化所有成员变量),即
字符串主机名 = Configuration.getHostname();
或者
字符串主机名 = Configuration.getConfigObject().getHostname();
当前问题: 如何创建一个静态对象,该对象将使用组合或继承来引用所有方法(从概念上讲,组合是正确的方法)。
多重继承本来可以解决这个问题,但 Java 不支持这样排除。也不能考虑接口,因为重写所有方法既乏味又冗长,而且参数/方法会随着时间的推移而不断变化。
欢迎所有建议,即使它需要放弃这种设计模式并尝试不同的东西。