2

假设这是我从 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它并读取新配置并重新初始化所有依赖对象。

任何帮助,将不胜感激。

4

1 回答 1

2

我认为您正在寻找Observer/Listener 设计模式。您的配置用户应该是“观察者”,而配置本身将是“主题”。首先,观察者将自己注册到一个主题中。接下来,每次更改主题时,它都会通知所有观察者,并且他们会重新加载(或做任何他们想做的事情)。

于 2013-01-19T19:04:05.973 回答