我想为搜索类实现一个接口,实现接口的最佳方法是什么?

时间:2012-05-31 07:44:09

标签: java design-patterns ooad

我想要一个包含多个不同选项的搜索类,我的搜索类应该能够以不同的方式过滤结果,例如:

getX()
getY()
getZ()
getK()

以上X,Y,Z,K是我的标准,它们在我的案例中很常见所以我决定创建一个如下界面:

public interface IFilter {

public String getX();
public void setX(String x);
.
.
.

//I am not sure about the return type of my criteria!
public IAmNotSureAboutReturnType criteria();
}

应用程序应该能够每次制定一个或多个标准,我的想法是有一个界面来指示一个类实现所有标准和所有一个criteria()方法将一个已编译的标准返回给我的搜索类。

所有标准都基于String但我不确定标准的返回类型(),因为它应该结合所有给定的标准并返回一个特定类型作为返回值。

我的搜索类不基于SQL,主要基于JSON。

任何人都可以建议我为搜索类设置标准接口的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

也许访问者模式有助于过滤器实现:

public interface IFilter<T> {

    /**
    * This method will be called by filtering mechanizm. If it return true - item 
    * stay in resul, otherwise item rejected
    */
    boolean pass(T input);

}

您可以创建将结合多个过滤器的AND和OR过滤器:

public class AndFilter<T> implements IFilter<T> {

    private final List<IFilter<T>> filters;

    public AndFilter(List<IFilter<T>> filters) {
        this.filter = filter;
    }

    @Override
    public boolean pass(T input) {
        for(IFilter<T> filter : filters) {
            if(!filter.pass(input)) {
                return false;
            }
        }
        return true;
    }
}