假设这是我从DB / XML读取的配置数据对象:
class ConfigurationClass{
//some configurations
public String getString(){
}
}
现在这是使用此配置对象的类
class ConfigurationUser implements Reloadable{
private ConfigurationClass configuration;
//some extra logic required for making object ready to use
public void init(){
// some new object is created based on configuration
SomeObject obj = new SomeObject(configuration.getString());
//register to configuration manager
}
@Override
public void reload(){
//does whole reloading stuff
//creates a new instance of configuration class and reads new configuration which is not appropriate
}
}
现在,当我必须重新加载配置时,假设我创建了ConfigurationClass
的新实例并将其注入ConfigurationUser
类。
但是我还必须重新初始化对象,以便它可以创建新的配置依赖对象。
这是一个合适的设计还是有更好的方法?我想过将Spring或Google Juice用于DI,但我还是要为配置用户类提供回调,该配置已经重新加载。
我是使用IoC容器的新手,所以不知道是否可能。 需要在实时服务器应用程序中使用它,因此必须严格控制垃圾生产和性能。
目前的解决方案:
public interface Reloadable{
public void reload();
}
我有一个配置管理器,我注册了所有配置用户实例,当要重新加载时,管理器只调用reload
并读取新配置并重新初始化所有相关对象。
任何帮助都将不胜感激。
答案 0 :(得分:1)
我认为你正在寻找Observer/Listener design pattern。您的配置用户应该是“观察者”,配置本身将是“主题”。首先,观察者将自己注册在一个主题中。接下来,每次更改主题时,它都会通知所有观察者,然后重新加载(或做任何他们想做的事情)。