2017-11-02 1 views
2

com.mydomain.project.Handlersリファクタリング既存のパターン

Xハンドラの実装がある場合は、工場でX変数を作成する必要があり、これは悪いと思います。このプロセスを簡単にするために私が適用できる既存のパターンはありますか?

+0

ファクトリパターンの責任は新しいインスタンスを構築することです。新しいインスタンスを作成せず、初期化するだけです。ファクトリは何も作成しないので、ここでは工場パターンが乱用されます。 **私は工場内でX変数を作成する必要があり、これは悪いと思います**、何も作成しないのでパターン違反です。何をやりたい、初期化する、または作成するのが好きですか? –

+0

@PeterRader .handle()メソッドは新しいオブジェクト(EventHandlerOne)を生成します。全く異なる2つのオブジェクトであるHandlerOneとEventHandlerOneがあります。 – i712345

+0

Aha!ファクトリクラスは何も作成しません。インスタンスを作成するのはハンドルメソッドです。したがって、handle-methodは 'ファクトリメソッドパターン'を完全にします。あなたの工場は実際の工場ではありません。 –

答えて

1

春がリストとして、特定のタイプのすべてのBeanを注入することができます

public class Factory 
{ 
    @Autowired 
    private List<? extends Handler> handlerList; 

    public <T extends Handler> T createHandler(Class<T> type) { 
     for(Handler handler : handlerList) { 
      if (type.getSimpleName().equals(handler.getClass().getSimpleName()) { 
       return handler; 
      } 
     } 

     return ...; //some default value 
    } 
} 
関連する問題