2012-05-31 3 views
1
내가 거기에 여러 가지 옵션을 검색 클래스를 갖고 싶어

내 검색 클래스는 다음과 같은 여러 가지 방법으로 결과를 필터링 할 수 있어야한다 :, Y, Z, K 내 기준입니다 X 위검색 클래스에 대한 인터페이스를 구현하고 싶습니다. 인터페이스를 구현하는 가장 좋은 방법은 무엇입니까?

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

및 나는 다음과 같은 인터페이스를 만들기로 결정 그래서 그들은 내 경우에는 일반적이다 : 응용 프로그램이 매번 1 개 이상의 기준을에 geting 할 수 있어야한다

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을 기반으로하지만 모든 주어진 조건을 결합하여 하나의 특정 유형을 리턴 값으로 리턴해야하므로 criteria()의 리턴 유형에 대해서는 확실하지 않습니다.

내 검색 클래스는 대부분 JSON을 기반으로 한 SQL을 기반으로하지 않습니다.

누구나 검색 클래스에 대한 기준을위한 인터페이스를 갖는 가장 좋은 방법은 무엇입니까?

+1

하는 방법 것 – tgoossens

+0

를 포맷 코드를 사용하려고하세요 당신은 반환 기준을 사용합니까? 다시 구문 분석하고 'x'가 설정되었고 그 값이 무엇인지 확인하는 경우 설정 한 기준에 대한지도를 반환하지 않는 이유는 무엇입니까? 반환 유형이 그대로 실행될 수있는 쿼리 여야하는 경우 해당 쿼리 클래스 (또는 인터페이스)를 만듭니다. 정확한 구현은 JSON 데이터 (사용하는 JSON 라이브러리, 데이터 형식 등)를 검색하는 방법에 따라 달라집니다. – Thomas

답변

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