zoukankan      html  css  js  c++  java
  • 【Android】策略模式封装百度地图路线规划模块

    百度地图的Demo里有个路线规划的功能,但是,这个功能和Activity耦合性太高,所以需要单独抽离出路径规划功能,进行“解耦”。
    注:由于项目原因,本文只针对驾车路线规划进行封装。

    首先,定义RoutePlan类,这个类就是路线规划类,既然是路线规划,所以要实现OnGetRoutePlanResultListener接口,路线规划需要的三个参数作为它的成员,即城市city、起点start、终点end。

    然后,由于需要搜索,所以对外提供搜索接口:

    public void drivingPlan(){}

    这个接口中即放基本的搜索:

    //路径搜索用到的类
    RoutePlanSearch mSearch = null;   
    // 初始化搜索模块,注册事件监听
    mSearch = RoutePlanSearch.newInstance();
    mSearch.setOnGetRoutePlanResultListener(this);
    PlanNode stNode = PlanNode.withCityNameAndPlaceName(city, start);
    PlanNode enNode = PlanNode.withCityNameAndPlaceName(city, end);
    //开始搜索
    boolean searchState = mSearch.drivingSearch((new DrivingRoutePlanOption()).from(stNode).to(enNode));

     由于百度地图驾车路线规划成功后会回调onGetDrivingRouteResult方法,同时为了可以解耦,加入RouteResultManage接口,里面就两个方法,一个是规划成功的处理函数void routeResultSuccess(DrivingRouteResult result) ;另一个是规划失败时候的处理函数void routeResultFail()。由于不同的Activity处理方法不同,因此可以定义为借口,为了传入接口,还需要在RoutePlan类中加入成员变量RouteResultManage routeResultManage。
    在回调函数onGetDrivingRouteResult中,通过routeResultManage.routeResultSuccess(result)处理。
    最后,需要用到路径规划功能的Activity只要实现RouteResultManage这个接口即可。在使用RoutePlan类的时候初始化中的RouteResultManage参数可以把自身传入。
    总结,这里面的策略模式中的三个角色分别为:策略类RouteResultManage,具体策略类Activity,上下文RoutePlan,其中Activity是作为Client端。
    git地址:https://github.com/chenmingIT/RoutePlan

  • 相关阅读:
    Java 匿名内部类
    【嘎】数组-搜索插入位置
    【嘎】数组-1266. 访问所有点的最小时间
    【嘎】数组-1313. 解压缩编码列表
    【嘎】数组-1431. 拥有最多糖果的孩子
    element-ui下拉多选报错Error in event handler for "handleOptionClick": "TypeError: value.push is not a function"
    【嘎】数组-有效的山脉数组
    【嘎】数组-打家劫舍
    【嘎】字符串-字符串中的第一个唯一字符
    linux
  • 原文地址:https://www.cnblogs.com/xmu-chenming/p/6286075.html
Copyright © 2011-2022 走看看