gpt4 book ai didi

java - Java中具有不同参数的接口(interface)方法

转载 作者:搜寻专家 更新时间:2023-11-01 03:39:33 25 4
gpt4 key购买 nike

寻找有关用 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 方法的参数可能不同。我读过命令模式和访问者模式,但它们似乎不太符合要求。

任何人都可以提出一个好的模式来实现我所描述的吗?

谢谢。

最佳答案

有很多方法可以做到这一点。有些很复杂,有些很简单。最简单的一种是使用 varargsObject 的数组元素。这里的问题是,您必须将每个 objetc 转换为正确的类型才能使用它们,如果有多种类型且顺序未知,这可能会有点棘手。

另一种选择是使用 Map<String,Object> (如果需要,您可以将其包装在自己的类中,例如 FilterParams )根据名称存储参数,然后您可以获取它们并相应地转换它们。


编辑

考虑到参数在运行时会有所不同,您需要有人“消息灵通”了解当前配置。

不是模式明智的,但我宁愿保持简单而不使用太多花哨的名字。介绍一个FilterConfigurator怎么样?有一个简单的重载方法 configure接收特定过滤器并根据其类型配置它?此配置器是知情实体,它知道这些参数的当前值。

目标是摆脱Service从配置过滤器的责任。

此外,如果您创建自己的 Filter类,您将能够实现单个 doFilter您无需更改即可调用。

还有另一个想法......它涉及一个FilterFactory创建 初始化过滤器,因此从头开始配置过滤器 100%。这家工厂完全可以依靠FilterConfigurer或者自己做。

关于java - Java中具有不同参数的接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18062023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com