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

  • 相关阅读:
    数字雨-贪吃蛇
    C语言入门9-2-模块大致一览
    C语言入门9-1-分类函数
    C语言入门8-数组-基本算法
    C语言入门7-程序设计方法基础-循环结构
    C语言入门6-选择结构--f语句-switch
    C语言入门5-键盘的输入和屏幕输出
    C语言入门4-运算符和表达式
    C语言入门3-C语言概述及数据类型
    Systemd 入门教程:命令篇
  • 原文地址:https://www.cnblogs.com/xmu-chenming/p/6286075.html
Copyright © 2011-2022 走看看