不同API地图的实现方式

319 阅读2分钟

当程序中使用了多个地图的api时,最简单的方法就是分别写一个界面,但这样维护起来实在太麻烦,这时我们可以考虑使用一个界面调用多个API

实现思路是这样子,每个地图的都应该抽象出来,作为单独的实现,而在界面中调用,我考虑状态模式,根据目前的地图状态,选择不同的操作。

先回顾下状态模式,这个模式跟策略模式很像,当策略模式每一步操作都要考虑状态的时候就该使用状态模式了。

先从简单分析,目前只考虑,添加标志物和划线两个方法,

定义地图接口

public interface ILMap {
    void addMarker();
    void drawLine();
}

百度地图实现方案

public class LBaiduMap implements ILMap {
    @Override
    public void addMarker() {
        print("百度地图添加标注!");
    }
    @Override
    public void drawLine() {
        print("百度地图划线!");
    }
}

高德地图实现方案

public class LGaodeMap implements ILMap {
    @Override
    public void addMarker() {
        print("高德地图添加标注!");
    }
    @Override
    public void drawLine() {
        print("高德地图划线!");
    }
}

由统一的地图管理器进行状态的管理

public class LMapManage implements ILMap{
    //默认高德地图
    ILMap map = new  LGaodeMap();
    @Override
    public void addMarker() {
        map.addMarker();
    }
    @Override
    public void drawLine() {
        map.drawLine();
    }
    //切换地图
    public void changeMap(ILMap map) {
        this.map = map;
    }
}

测试代码

public class StatusTest {
    public static void main(String args[]) {
        ILMap baidu  = new LBaiduMap();
        LMapManage mapManage = new LMapManage();
        mapManage.drawLine();
        mapManage.addMarker();
        mapManage.changeMap(baidu);
        mapManage.drawLine();
        mapManage.addMarker();
    }
}
public class JavaUtil {
    public static void print(String s){
        System.out.println(s);
    }
}

运行效果如下

另外,对于xml中地图对应的View,建议在初始化地图时动态生成。