Java 责任链的使用
我想使用模式责任链来检查位置(纬度和经度)是否在距离上。为此,我得到了一个布尔值,如果位置在距离上,它应该是真的,如果不是,它应该是假的。在模式之前-我的代码如下所示:Java 责任链的使用,java,design-patterns,chain-of-responsibility,Java,Design Patterns,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.mLongit
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;
}
公共静态布尔OnDistance(MyLocation a、MyLocation b、MyLocation queryPoint){
//wenn x von a kleiner是一家b's公司
如果(a.m长度=queryPoint.mlongities&&queryPoint.mlongities>=a.mlongities){
如果(a.m纬度>b.m纬度){
if(queryPoint.mLatitude=b.mLatitude){
System.out.println(“ja!”);
返回true;
}
}
如果(a.m纬度=a.mLatitude&&queryPoint.mLatitude=b.mlongstitude&&queryPoint.mlongstitude b.mLatitude){
if(queryPoint.mLatitude=b.mLatitude){
System.out.println(“ja!”);
返回true;
}
}
如果(a.m纬度
我的责任链代码的一部分(我有四个这样的类):
公共布尔检查(MyLocation a、MyLocation b、MyLocation queryPoint){
//TODO自动生成的方法存根
如果((a.m长度=queryPoint.mlongities&&queryPoint.mlongities>=a.mlongities)
&&(a.mLatitude>b.mLatitude)
&&(queryPoint.mLatitude=b.mLatitude)){
System.out.println(“ja,gerne!”);
距离=真;
返回true;
}
否则{
距离=假;
System.out.println(“weiter,lauf doch weiter”);
检查(a、b、查询点);
}
返回false;
}}
代码可以工作,但由于“布尔返回”,它会遍历整个链,然后返回执行此返回的完整路径
我的问题:
首先,责任链是否是“替换”此if声明的合适方式。
有没有一种方法可以阻止链一直返回执行所有的返回,或者我可以用什么来代替这个布尔值
谢谢 我解决了这个问题,用一个“抽象类链”替换了我的“接口链”,这个抽象类链得到了一个受保护的布尔值和一个该布尔值的getMethod。现在,chainmethod中不再需要返回值。为什么要否决这个问题?告诉我,这样我才能提高自己。我没有否决你的问题。然而,我认为责任链中的每个类都应该有不同的逻辑。您的方法在所有类中似乎都是相同的(距离计算)。你能包含这个类的第二个变体吗?
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;
}}