1

以下の問題をコーディングするための設計パターンまたは最良の方法を誰かが提案してくれるかどうか疑問に思っています。

1)以下のような本の配列リストがあります

list.add(new Book(title, author);
list.add(new Book(title1, author1);

等々....

2) そして今、リストからすべての本を著者別に見つけたいと思います

findByAuthor(String author) {
  for(Book book : list){
    if(book.getAuthor().equals(author)){
      return book;
    }
  }
}

同様に、findByTitle() という別のメソッドがあります。ただし、book.getAuthor() が book.getTitle() でなければならないことを除いて、同じコードになります。すべてが同じになります。

3) これで、以下のように両方のメソッドにジェネリックなメソッドを作成できます。

findByBookProperty (String type, String propertyValue){
  for(Book book : list)
    if(type.equals("author") && book.getTitle().equals(propertyValue)){
      return book;
    } //another else if for author
    //another else for another property
    // if else repeats for all the required finder types...
  }
}

4) ここでの問題は次のとおりです。1. finder 型に厄介な if/else 条件を使用したくありません。2.デザインパターンや、if elseやswichメソッドでこれを処理するより良い方法があるかどうかを知りたいです。

重要な注意: Spring コントローラー メソッドで、作成者名をリクエスト パラメーター値として取得します。

あなたの考えに感謝します。

4

1 に答える 1

3

Commons-Collections の Predicates フレームワークを使用します。

Predicate1)各タイプのテストのインスタンスを構築します。

2) を使用CollectionUtils.select()して、オブジェクトの評価に使用する述語を渡します。

もう 1 つの方法は、Commons-Collections の変換フレームワークを使用することです。

1)Transformer抽出/比較するプロパティのタイプごとに を記述します。

Transformer2)インスタンスをパラメーターとして受け入れて、一般的なループを作成します。

于 2012-09-10T07:57:43.187 に答える