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. 我不想对查找器类型使用讨厌的 if/else 条件。2. 我想知道是否有任何设计模式或更好的方法来处理这个 if else 或 swich 方法。

重要提示:我在我的 spring 控制器方法中获取作者姓名作为请求参数值。

我很欣赏你的想法。

4

1 回答 1

3

使用 Commons-Collections 的谓词框架:

Predicate1)为每种类型的测试构造一个实例。

2) Use CollectionUtils.select(),传入你想用来评估对象的谓词。

另一种选择是使用 Commons-Collections 的转换框架:

Transformer1)为您想要提取/比较的每种类型的属性编写一个。

2) 编写一个通用循环,接受一个Transformer实例作为参数。

于 2012-09-10T07:57:43.187 回答