过滤对象的设计模式

blu*_*sky 5 java design-patterns

我有一个将被过滤的对象列表.

此过滤将包含至少3个规则.

例如:

public class Filtering {

List<MyObject> myObjectList;

List<MyObject> filterStep1(List<MyObject> myObjectList){

    for(Myobject myobj : myObjectList){
        if(isCriteriaSatisified){
            continue
        }
        else {
            removeThisObjectFromList
        }
    }
}


List<MyObject> filterStep2(List<MyObject> myObjectList){

    for(Myobject myobj : myObjectList){
        if(isCriteriaSatisified){
            continue
        }
        else {
            removeThisObjectFromList
        }
    }
}

}
Run Code Online (Sandbox Code Playgroud)

我喜欢这种方法,因为它简单,自包含,可以很容易地看到想要实现的目标.

但也许我应该使用一种设计模式呢?

我正在考虑"责任链"模式,上面代码中的filterStep1和filterStep2将被重构为单独的处理程序.

chr*_*ke- 5

这是“管道和过滤器”模式,虽然您的实现没问题,但最好不要在方法中硬编码过滤逻辑。相反,Predicate<MyObject>为每个布尔条件编写一个(Java 8 中内置的或 Guava 中的)。这更容易测试,并且可以轻松应用于现有的干净 API,例如 Streams API 或 Guava 的集合视图。