责任链的使用
usage of 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;
}}
代码有效,但由于 "boolean return" 它遍历链,然后完整地返回以执行此 returns。
我的问题:
首先 - 责任链是 "replace" 这个 if 语句的合适方式。
有没有办法阻止链条一直返回执行所有 returns 或者我可以使用什么来代替这个布尔值?
谢谢!
我通过将我的 "interface chain" 替换为 "abstract class chain" 来解决这个问题,该 "abstract class chain" 获得了受保护的布尔值和该布尔值的 getMethod 。现在链方法中不再需要 return 值。
我想使用责任链模式来检查某个位置(纬度和经度)是否在一定距离内。为此,我得到了一个布尔值,如果位置在距离上,则该值应为真,否则为假。在模式之前 - 我的代码如下所示:
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;
}}
代码有效,但由于 "boolean return" 它遍历链,然后完整地返回以执行此 returns。
我的问题: 首先 - 责任链是 "replace" 这个 if 语句的合适方式。 有没有办法阻止链条一直返回执行所有 returns 或者我可以使用什么来代替这个布尔值?
谢谢!
我通过将我的 "interface chain" 替换为 "abstract class chain" 来解决这个问题,该 "abstract class chain" 获得了受保护的布尔值和该布尔值的 getMethod 。现在链方法中不再需要 return 值。