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

Java 我想为搜索类实现一个接口,实现接口的最佳方法是什么?,java,design-patterns,ooad,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 cri

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

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();
}
应用程序应该能够每次获取1个或多个条件,我的想法是使用一个接口来指示类实现所有条件,并使用一个criteria()方法将编译后的条件返回给搜索类

所有的条件都基于字符串,但我不确定criteria()的返回类型,因为它应该组合所有给定的条件并返回一个特定类型作为返回值

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


有人能告诉我什么是为搜索类的标准提供接口的最佳方法吗?

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

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);

}
公共接口IFilter{
/**
*筛选mechanizm将调用此方法。如果它返回true-item
*保留结果,否则项目被拒绝
*/
布尔传递(T输入);
}
您可以创建将组合多个过滤器的AND或过滤器:

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;
    }
}
公共类和过滤器实现IFilter{
私有最终列表过滤器;
公共和过滤器(列表过滤器){
this.filter=过滤器;
}
@凌驾
公共布尔传递(T输入){
用于(IFilter过滤器:过滤器){
如果(!过滤器通过(输入)){
返回false;
}
}
返回true;
}
}

请尝试使用代码格式您将如何使用返回的条件?如果您想再次解析它,并查看是否设置了
x
,以及它的值是什么,那么为什么不为设置的条件返回一个映射呢?如果返回类型应该是可以按原样执行的查询,那么创建这样的查询类(或接口)。具体的实现取决于如何搜索JSON数据(您使用的JSON库、数据的格式等)。