寻找一些关于在 Java 中设计一些代码的指导。
目前我有这样的事情......
@Service
class SomeService {
@Autowired
private FilterSoldOut filterSoldOut;
@Autowired
private FilterMinPriceThreshold filterMinPriceThreshold;
public List<Product> getProducts() {
List<Product> products = //...code to get some products
// Returns list of in-stock products
products = filterSoldOut.doFilter(products);
// Returns list of products above min price
products = filterMinPriceThreshold.doFilter(minPrice, products);
return products;
}
}
我希望能够做的是使用 doFilter 方法创建一个 Filter 接口(interface),然后在 SomeService 中创建一个 List 过滤器,该过滤器由 Spring Autowiring 。然后在 getProducts 方法中,我可以迭代过滤器列表并调用 doFilter。通过这种方式,我将来可以创建实现 Filter 接口(interface)的新类,并通过 Spring 配置将它们添加到列表中,并且无需更改代码即可应用新的过滤器。
但是,问题是 doFilter 方法的参数可能不同。我已经阅读了命令模式和访问者模式,但它们似乎不太符合要求。
谁能提出一个好的模式来实现我所描述的?
谢谢。
最佳答案
旧 :
新建议 (在评论后提出):
您可以创建一个对象 (AllFiltersState) 来保存所有过滤器的所有值。在您的 Controller 中,在此对象中设置您需要的任何条件(minPrice、颜色等)并将其传递给产品中的每个过滤器 - doFilter(allFiltersState, products)。