Java设计模式(八)过滤器模式
一、概要
过滤器模式是一种结构型设计模式,它允许通过一系列条件来筛选对象,并提供一种灵活的方式来组合和操作这些条件。过滤器模式将过滤条件封装成独立的过滤器类,然后使用这些过滤器来过滤对象集合,以满足特定的条件。
二、代码
以下是一个示例代码,说明过滤器模式的使用:
//1.表示一个产品 public class Product { //产品名称 private String name; //产品类别 private String category; //产品价格 private double price; public Product(String name, String category, double price) { this.name = name; this.category = category; this.price = price; } public String getName() { return name; } public String getCategory() { return category; } public double getPrice() { return price; } } //2.过滤器接口 public interface Filter { List<Product> filter(List<Product> products); } //3.具体过滤器:按类别过滤 public class CategoryFilter implements Filter { private String category; public CategoryFilter(String category) { this.category = category; } @Override public List<Product> filter(List<Product> products) { List<Product> filteredProducts = new ArrayList<>(); for (Product product : products) { if (product.getCategory().equals(category)) { filteredProducts.add(product); } } return filteredProducts; } } //4.具体过滤器:按价格过滤 public class PriceFilter implements Filter{ private double maxPrice; public PriceFilter(double maxPrice) { this.maxPrice = maxPrice; } @Override public List<Product> filter(List<Product> products) { List<Product> filteredProducts = new ArrayList<>(); for (Product product : products) { if (product.getPrice() <= maxPrice) { filteredProducts.add(product); } } return filteredProducts; } } //5.测试类 public class Test { public static void main(String[] args) { //创建产品列表 List<Product> products = new ArrayList<>(); products.add(new Product("iPhone", "Electronics", 999.99)); products.add(new Product("iPad", "Electronics", 799.99)); products.add(new Product("MacBook", "Electronics", 1999.99)); products.add(new Product("Shirt", "Clothing", 29.99)); products.add(new Product("Jeans", "Clothing", 49.99)); //过滤类别 Filter electronicsFilter = new CategoryFilter("Electronics"); List<Product> electronicsProducts = electronicsFilter.filter(products); System.out.println("Electronics products:"); for (Product product : electronicsProducts) { System.out.println(product.getName()); } //过滤价格 Filter priceFilter = new PriceFilter(50.0); List<Product> cheapProducts = priceFilter.filter(products); System.out.println("Cheap products:"); for (Product product : cheapProducts) { System.out.println(product.getName()); } } }
在上述代码中,我们有一个产品类 Product,它包含了产品的名称、类别和价格。我们使用过滤器模式来过滤产品集合。
Filter 是过滤器接口,定义了过滤器的方法 filter()。
CategoryFilter 和 PriceFilter 是具体的过滤器实现类,分别用于按类别和价格进行过滤。它们实现了 Filter 接口,并在 filter() 方法中根据特定的条件进行过滤操作。
在测试代码中,我们创建了一个产品集合,并使用过滤器来筛选出满足特定条件的产品。首先,我们使用 CategoryFilter 过滤器筛选出类别为 “Electronics” 的产品,并打印出它们的名称。然后,我们使用 PriceFilter 过滤器筛选出价格低于等于 50.0 的产品,并打印出它们的名称。
通过过滤器模式,我们可以灵活地组合和使用不同的过滤器来满足不同的筛选需求,而不需要修改原有的产品类。这样可以提高代码的可维护性和可扩展性。