0

責任の連鎖パターンを使用して、場所 (緯度と経度) が離れているかどうかを確認したいと考えています。この目的のために、場所が遠くにある場合はtrue、そうでない場合はfalseになるブール値を取得しました。パターンの前 - 私のコードは次のようになりました:

    public static boolean OnDistance(MyLocation a, MyLocation b, MyLocation queryPoint) {
    // wenn x von a kleiner ist als b´s
    if (a.mLongitude < b.mLongitude) {
        // nd query dazwischen liegt
        if (b.mLongitude >= queryPoint.mLongitude && queryPoint.mLongitude >= a.mLongitude) {

            if (a.mLatitude > b.mLatitude) {
                if (queryPoint.mLatitude <= a.mLatitude && queryPoint.mLatitude >= b.mLatitude) {
                    System.out.println("ja!");
                    return true;
                }
            }
            if (a.mLatitude < b.mLatitude) {
                if (queryPoint.mLatitude >= a.mLatitude && queryPoint.mLatitude <= b.mLatitude) {

                    System.out.println("ja!");
                    return true;
                }
            }
        }
        {
        }

    }
    // wenn x von b kleiner ist als a´s
    if (b.mLongitude < a.mLongitude) {

        if (queryPoint.mLongitude >= b.mLongitude && queryPoint.mLongitude <= a.mLongitude) {

            if (a.mLatitude > b.mLatitude) {

                if (queryPoint.mLatitude <= a.mLatitude && queryPoint.mLatitude >= b.mLatitude) {
                    System.out.println("ja!");
                    return true;
                }
            }
            if (a.mLatitude < b.mLatitude) {
                if (queryPoint.mLatitude <= b.mLatitude && queryPoint.mLatitude >= a.mLatitude) {
                    System.out.println("ja!");
                    return true;
                }
            }
        }
    }

    System.out.println("leider nichts geworden! . lauf weiter!!!!");
    return false;
}

責任の連鎖コードの一部 (このような 4 つのクラスを取得しました):

    public boolean check(MyLocation a, MyLocation b, MyLocation queryPoint) {
    // TODO Auto-generated method stub
    if ((a.mLongitude < b.mLongitude)
            && (b.mLongitude >= queryPoint.mLongitude && queryPoint.mLongitude >= a.mLongitude)
            && (a.mLatitude > b.mLatitude)
            && (queryPoint.mLatitude <= a.mLatitude && queryPoint.mLatitude >= b.mLatitude)) {

        System.out.println("ja, gerne!");
        onDistance = true;
        return true;

    }

    else {
        onDistance = false;
        System.out.println("weiter, lauf doch weiter");
        nextInChain.check(a, b, queryPoint);
    }

    return false;

}}

コードは機能しますが、「ブール値の戻り値」のためにチェーンをたどり、その後完全に戻ってこの戻り値を実行します。

私の質問: まず第一に、責任の連鎖は、この if 文を「置き換える」適切な方法ですか。そして、すべてのリターンを実行するためにチェーンを停止する方法はありますか、それともこのブール値の代わりに何を使用できますか?

ありがとう!

4

1 に答える 1

0

「インターフェースチェーン」を、保護されたブール値とこのブール値のgetMethodを取得した「抽象クラスチェーン」に置き換えることで、この問題を解決しました。これで、chainmethod の戻り値は不要になりました。

于 2015-10-29T14:46:24.603 に答える