首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >责任链的使用

责任链的使用
EN

Stack Overflow用户
提问于 2015-10-27 10:00:32
回答 1查看 385关注 0票数 0

我想使用模式链的责任来检查一个位置(纬度和经度)是否在一个距离上。为此,我得到了一个布尔值,如果位置位于距离上,则为true;如果没有,则为false。在模式之前-我的代码如下所示:

代码语言:javascript
复制
    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;
}

这是我的责任链代码的一部分(我有四个类似的类):

代码语言:javascript
复制
    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;

}}

代码可以工作,但由于“布尔返回”,它遍历链,然后遍历完整的返回方式来执行该返回。

我的问题是:首先--责任链是“替代”这种假设状态的合适方式。是否有办法阻止链式反应,一路倒流,执行所有返回,或者更确切地说,我可以用什么来代替这个布尔值?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-29 14:46:24

我通过将“接口链”替换为“抽象类链”来解决这个问题,它为这个布尔值提供了一个受保护的布尔值和一个getMethod。现在,不再需要在there方法中返回值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33364818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档