1

いくつかの異なるオプションを含む検索クラスが必要です。私の検索クラスは、次のようなさまざまな方法で結果をフィルタリングできる必要があります。

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() の戻り値の型についてはまだわかりません。

私の検索クラスはSQLに基づいておらず、主にJSONに基づいています。

検索クラスの基準のインターフェースを持つための最良のアプローチは何ですか?

4

1 に答える 1

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;
    }
}
于 2012-05-31T08:00:56.533 に答える