我想要一个包含几个不同选项的搜索类,我的搜索类应该能够以不同的方式过滤结果,例如:
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()方法均将已编译的条件返回给我的搜索类。
所有条件都基于String,但我不确定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);
}
您可以创建将合并多个过滤器的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;
}
}