当程序中使用了多个地图的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,建议在初始化地图时动态生成。