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库、数据的格式等)。