寻找一些关于在 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)。

10-08 14:32