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ただし、新しい構成に依存するオブジェクトを作成できるように、オブジェクトを再初期化する必要もあります。

これはそれを行うための適切な設計ですか、それともより良いアプローチがありますか?DIにSpringまたはGoogleJuiceを使用することを考えましたが、構成が再ロードされた構成ユーザークラスにコールバックを提供する必要があります。

私はIoCコンテナを初めて使用するので、それが可能かどうかわかりません。これをリアルタイムサーバーアプリケーションで使用する必要があるため、ガベージの生成とパフォーマンスに厳密にする必要があります。

現在の解決策:

public interface Reloadable{

    public void reload(); 
}

すべての構成ユーザーインスタンスを登録する構成マネージャーがあります。リロードを実行する場合、マネージャーは呼び出すだけでreload、新しい構成を読み取り、すべての依存オブジェクトを再初期化します。

どんな助けでもいただければ幸いです。

4

1 に答える 1

2

Observer/Listener design patternを探していると思います。構成ユーザーは「オブザーバー」である必要があり、構成自体は「サブジェクト」になります。まず、オブザーバーは自分自身をサブジェクトに登録します。次に、サブジェクトが変更されるたびに、すべてのオブザーバーに通知し、リロードします (または希望することを行います)。

于 2013-01-19T19:04:05.973 に答える