Использование Цепочки ответственности
Я хочу использовать шаблон 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 для этого логического значения. Теперь больше нет необходимости возвращать значение в методе цепочки.