2017-09-09 10 views
0

これは私の問題です: 2つの可能な方法のうちの1つで特定のタイプのメッセージを処理することを可能にするJavaライブラリを作成しています(ただし、クライアントが他の処理モダリティを追加する可能性があります)。私は、戦略のパターンに応じて、以下のクラスを作成しました:「MessageTypeOne:ProcessorOne、MessageTypeTwo:ProcessorTwoをファクトリパターンを使用してコンフィグレーションから読み取られたオブジェクトをインスタンス化するにはどうすればよいですか?

interface Processor { 
     Message processMessage(); 
    } 

    class ProcessorOne<M extends Message> implements Processor{ 
     M processMessage(){ //do stuff } 
    } 

    class ProcessorTwo<M extends Message> implements Processor{ 
     M processMessage(){ //do other stuff } 
    } 

    abstract class Message{ 
    } 

    //example 
    class MessageTypeOne extends Message{ 
    } 
    //example 
    class MessageTypeTwo extends Message{ 
    } 

は今、クライアントがメッセージのすべての具体的なタイプのために、彼が言うようにコンフィギュレーションを使用しています、MessageTypeThree:ProcessorOne "、MessageTypeOne型のメッセージをProcessorOneクラスなどで処理する必要があることを確認します。 設定はxmlファイルまたはその他のタイプの設定です。これはクライアントに依存します。

私の質問は、クライアントが設定から読み込むものと、自分が選んだ設定の種類に応じて、独自の構文解析方法を使用して読み込まれるものとの間に「リンク」を作り、ファクトリを使用して具体的なプロセッサをインスタンス化する方法パターン?

ありがとうございます。

答えて

0

私はそれをアーカイブするのは難しいと思います。 Factoryパターンを使用して名前に基づいてプロセッサインスタンスを作成できますが、これらの2つのクラスを構成ファイルに関連付けることはできません。私はeasistの方法は、あなたのビジネスロジックのために別の工場を使用することだと思います。たとえば、

Map<String, String> conf = null; // What parsed from config 
    String messageType = // What you have 
    Processor processor = ProcessorFactory.createProcessor(conf.get(messageType)); 
    Message message = MessageFactory.createMessage(messageType); 
    // processing 
+0

このようにして、クライアントの責任はマップの内容をループしてマップのコンテンツをループして具体的なプロセッサを作成することです(私はそう思います)。 – sibly22

+0

@ sibly22はい。プロセッサのインスタンスもマップにキャッシュすることができます。 –

+0

ありがとう非常にありがとう – sibly22

関連する問題