Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 责任链的使用_Java_Design Patterns_Chain Of Responsibility - Fatal编程技术网

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;

}}