过滤器模式学习笔记
什么是过滤器模式?
过滤器模式是一种结构型设计模式,它允许我们通过一个或多个条件来过滤出数据集中的元素。
这个模式主要使用一些条件来过滤一组对象,将符合条件的对象返回给调用方。这个过程通常是链式的,并且每个过滤器都会根据特定的标准筛选对象。
过滤器模式的优点
- 可以简化代码:过滤器模式可以将筛选逻辑拆分成多个部分,这样可以更容易地编写和维护代码。
- 可以提高代码的复用性:过滤器模式可以将不同的过滤器组合在一起,这样可以更容易地复用代码。
- 可以提高效率:由于过滤器只处理符合条件的对象,因此可以降低运行时间和资源消耗。
过滤器模式的实例
假设我们正在开发一个在线商店,该商店有很多商品,我们需要对这些商品进行过滤。例如,我们需要找到所有价格在一定范围内的电子产品。
我们可以使用过滤器模式来实现这个功能。我们可以创建一个接口,例如 Filter
,该接口需要实现一个方法 filter
,该方法将接收一个商品列表,并返回一个经过筛选的商品列表。我们还可以创建一个抽象类 AbstractFilter
,该类实现了 Filter
接口,并提供了一些通用的方法。
具体实现可以看下面的示例代码:
javaCopy Codepublic interface Filter {
List<Product> filter(List<Product> products);
}
public abstract class AbstractFilter implements Filter {
protected Filter nextFilter;
public AbstractFilter(Filter nextFilter) {
this.nextFilter = nextFilter;
}
@Override
public List<Product> filter(List<Product> products) {
List<Product> filteredProducts = applyFilter(products);
if (nextFilter != null) {
filteredProducts = nextFilter.filter(filteredProducts);
}
return filteredProducts;
}
protected abstract List<Product> applyFilter(List<Product> products);
}
public class PriceRangeFilter extends AbstractFilter {
private final double minPrice;
private final double maxPrice;
public PriceRangeFilter(double minPrice, double maxPrice, Filter nextFilter) {
super(nextFilter);
this.minPrice = minPrice;
this.maxPrice = maxPrice;
}
@Override
protected List<Product> applyFilter(List<Product> products) {
List<Product> filteredProducts = new ArrayList<>();
for (Product product : products) {
if (product.getPrice() >= minPrice && product.getPrice() <= maxPrice) {
filteredProducts.add(product);
}
}
return filteredProducts;
}
}
在上面的示例中,我们创建了一个接口 Filter
和一个抽象类 AbstractFilter
。我们还创建了一个具体的过滤器 PriceRangeFilter
,用于过滤价格位于指定范围内的商品。
该过滤器继承自 AbstractFilter
,它实现了 applyFilter
方法,用于对产品列表进行筛选。它还具有两个成员变量,即最小价格和最大价格,以便在筛选时使用。
我们可以创建类似的过滤器,例如根据产品名称、产品类型等进行筛选的过滤器。
使用上面的代码,我们可以通过以下方式来过滤产品:
javaCopy CodeFilter priceRangeFilter = new PriceRangeFilter(50, 100, null);
List<Product> filteredProducts = priceRangeFilter.filter(products);
在这个例子中,我们通过创建一个 PriceRangeFilter
过滤器来过滤价格位于 50 到 100 之间的产品。然后,我们使用 filter
方法对整个产品列表进行筛选。
这就是过滤器模式的基本实现。它可以帮助我们编写更灵活和可重用的代码,使我们能够更有效地处理数据集合。