过滤器模式java
时间: 2023-07-05 16:06:03 浏览: 86
过滤器模式(Filter Pattern)是一种结构型设计模式,它允许开发人员使用不同的条件来过滤一组对象,从而达到筛选、排序等目的。
在 Java 中,过滤器模式可以通过实现 Filter 接口来实现。该接口中定义了一个 doFilter() 方法,用于过滤指定的对象。具体实现时,可以定义多个 Filter 对象,并将它们按照一定顺序组合起来,形成一个 FilterChain。当需要对一组对象进行过滤时,只需要调用 FilterChain 的 doFilter() 方法即可。
下面是一个简单的示例代码:
```java
interface Filter {
void doFilter(Object obj);
}
class NameFilter implements Filter {
@Override
public void doFilter(Object obj) {
if (obj instanceof String) {
String name = (String)obj;
if (name.startsWith("A")) {
System.out.println("NameFilter: " + name);
}
}
}
}
class AgeFilter implements Filter {
@Override
public void doFilter(Object obj) {
if (obj instanceof Integer) {
int age = (int)obj;
if (age > 18) {
System.out.println("AgeFilter: " + age);
}
}
}
}
class FilterChain {
private List<Filter> filters = new ArrayList<>();
public void addFilter(Filter filter) {
filters.add(filter);
}
public void doFilter(Object obj) {
for (Filter filter : filters) {
filter.doFilter(obj);
}
}
}
public class Main {
public static void main(String[] args) {
List<Object> list = new ArrayList<>();
list.add("Alice");
list.add("Bob");
list.add(20);
list.add(15);
FilterChain chain = new FilterChain();
chain.addFilter(new NameFilter());
chain.addFilter(new AgeFilter());
for (Object obj : list) {
chain.doFilter(obj);
}
}
}
```
运行结果:
```
NameFilter: Alice
AgeFilter: 20
```
在上面的示例代码中,我们定义了两个 Filter 实现类:NameFilter 和 AgeFilter。分别用于过滤字符串和整数类型的数据。通过定义 FilterChain 类,我们将多个 Filter 对象组合在一起,形成一个过滤器链。最后,我们将一组对象(包含字符串和整数类型)传入过滤器链,进行过滤操作。
阅读全文