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

  • 相关阅读:
    战旗游戏系统分析
    战棋游戏的战术性
    利用JSFL制作swf素材包
    深刻理解Java编程的7个例子
    ORACLE SQL:经典查询练手第二篇
    删除U盘时提示无法停止“通用卷”设备
    ORACLE SQL:经典查询练手第四篇
    IE8中打不开oracle EBS画面 FRM92050
    ORACLE SQL:经典查询练手第三篇
    ORACLE SQL:经典查询练手第一篇
  • 原文地址:https://www.cnblogs.com/xmu-chenming/p/6286075.html
Copyright © 2011-2022 走看看