过滤器模式
下面是一个简单的Java代码展示示例,展示了经过滤器模型的现实:
import java.util.ArrayList;
import java.util.List;
// 实体类
class Product {
private String name;
private String category;
public Product(String name, String category) {
this.name = name;
this.category = category;
}
public String getName() {
return name;
}
public String getCategory() {
return category;
}
}
// 过滤器接口
interface Filter {
List<Product> filter(List<Product> products);
}
// 具体过滤器实现类:按类别过滤
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().equalsIgnoreCase(category)) {
filteredProducts.add(product);
}
}
return filteredProducts;
}
}
// 具体过滤器实现类:按名称过滤
class NameFilter implements Filter {
private String name;
public NameFilter(String name) {
this.name = name;
}
@Override
public List<Product> filter(List<Product> products) {
List<Product> filteredProducts = new ArrayList<>();
for (Product product : products) {
if (product.getName().equalsIgnoreCase(name)) {
filteredProducts.add(product);
}
}
return filteredProducts;
}
}
// 客户端代码
public class FilterPatternExample {
public static void main(String[] args) {
// 创建产品列表
List<Product> products = new ArrayList<>();
products.add(new Product("iPhone", "Electronics"));
products.add(new Product("MacBook", "Electronics"));
products.add(new Product("T-shirt", "Clothing"));
products.add(new Product("Jeans", "Clothing"));
// 创建过滤器
Filter categoryFilter = new CategoryFilter("Electronics");
Filter nameFilter = new NameFilter("iPhone");
// 进行过滤操作
List<Product> filteredProducts = categoryFilter.filter(products);
System.out.println("Filtered Products (Category):");
printProducts(filteredProducts);
filteredProducts = nameFilter.filter(products);
System.out.println("Filtered Products (Name):");
printProducts(filteredProducts);
}
private static void printProducts(List<Product> products) {
for (Product product : products) {
System.out.println(product.getName() + " - " + product.getCategory());
}
}
}
在上面的例子中,我们首先确定了一个实体类Product
,它具有名称和类别属性。
然后,我们确定了过滤器接口Filter
,其中包含一个filter()
方法,用于根据过滤器产品列表。
着着,我们发现了两个具体的过滤器实际类:CategoryFilter
和NameFilter
。CategoryFilter
通过指定类别来过滤产品列表,NameFilter
通过指定名称来过滤产品产品列表。这两个滤器类实现了Filter
接口中的filter()
方法。
最后,在客户端代码中,我们创建了一个产品列表,并创建了两个工具实例:`CategoryFilter
和
NameFilter`。然后,我们分别使用这两个过滤器来过滤器产品列表,并将过滤器结果打印到控制台上。
通过上面说明的例子可以看出,滤液器模型可以很方便地实现对一个列表中的元素进行过滤的功能,同时也能足够方便地拖放展开和修改滤器的现实,符合开闭原则。
标签:String,List,products,过滤器,filteredProducts,10.14,name From: https://www.cnblogs.com/luoqingci/p/18556254