Использование Цепочки ответственности

Я хочу использовать шаблон Chain of Responsibility, чтобы проверить, находится ли местоположение (Широта и Долгота) на расстоянии. Для этого я получил логическое значение, которое должно быть истинным, если местоположение находится на расстоянии, и ложным, если нет. До шаблона - мой код выглядел так:

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

часть моего кода цепочки ответственности (я получил четыре класса, как этот):

    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-статистики. И есть ли способ остановить цепочку, вернуться назад, чтобы выполнить все возвраты, или, скорее, что я могу использовать вместо этого логического значения?

Спасибо!

1 ответ

Решение

Я решил эту проблему, заменив мою "цепочку интерфейсов" на "цепочку абстрактных классов", которая получила защищенное логическое значение и getMethod для этого логического значения. Теперь больше нет необходимости возвращать значение в методе цепочки.

Другие вопросы по тегам