过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来
Class Diagram
 
Implementation
过滤器接口
| 12
 3
 
 | public interface Filter {<T> List<T> doFilter(List<T> list);
 }
 
 | 
具体过滤器
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 
 | public class ConcreteFilterA implements Filter {@Override
 public <T> List<T> doFilter(List<T> list) {
 final List<T> result = new ArrayList<>();
 list.forEach((item)->{
 if(!item.equals("a")){
 result.add(item);
 }
 });
 return result;
 }
 }
 
 public class ConcreteFilterB implements Filter {
 @Override
 public <T> List<T> doFilter(List<T> list) {
 final List<T> result = new ArrayList<>();
 list.forEach((item)->{
 if(!item.equals("b")){
 result.add(item);
 }
 });
 return result;
 }
 }
 
 | 
测试类
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 | public class FilterTest {
 List<String> stringList = new ArrayList<>();
 List<Filter> filterList = new ArrayList<>();
 
 @Before
 public void init(){
 stringList.add("a");
 stringList.add("b");
 stringList.add("c");
 stringList.add("d");
 
 filterList.add(new ConcreteFilterA());
 filterList.add(new ConcreteFilterB());
 }
 
 @Test
 public void test() throws Exception{
 filterList.forEach((filter -> {
 List<String> result = filter.doFilter(stringList);
 System.out.println("Filter"+filter.getClass().getSimpleName()+" : "+result.toString());
 }));
 }
 }
 
 | 
Example
Reflence