如何封装地图类库

前几天在封装高德的地图类库,这种工作没什么难度,但是很繁琐,需要把应用层目前用到的高德地图API全部去掉换成自己封装好的地图包装类库,我是这么做的,不知道有没有更好的办法

  1. 根据使用的高德API,对应的创建一个接口,接口里就是这个API在应用层用到的方法
  2. 创建该接口的实现类,如果这个类里有实际地图的实现类那么这种类都需要在Factory工厂类里提供,这样切换地图框架的时候直接在该接口的工厂类里切换接口的实现类即可(如果没有实际使用第三方地图框架,那么这种类也不需要去写一个接口再继承,直接写包装类即可)
  3. 如果包装类里需要使用实际的第三方地图框架的API实例,而该API实例不能自己创建而需要在地图框架的地图类里get获取,那么该包装类应该由可以提供所需参数的其他包装类创建
  4. 创建工厂类,工厂类负责创建包装类的实例,返回值是该包装类继承的接口
  5. 调用时,应用层使用我们自己的包装类,传入参数是和具体地图无关的值,传给包装类以后,包装类用这些值创建实际的地图所需的实例
  6. 修改应用层代码,在创建具体地图类实例的时候,用我们的包装类代替,参数传入地图类实例所需的原始参数

举个例子:
针对高德地图的AMap我写了个包装类的接口IAMapWrap,在该接口里都是在应用层调用到的方法,其中的参数也是与实际地图无关的参数,然后在该接口的实现类GaodeMapWrapImpl里,我用这些参数创建了实际的地图类实例,然后在MapWrapFactory里我写了一个方法来提供这个MapWrap实例,当然返回的是IAMapWrap接口,这样上层就可以使用这个接口来做地图的操作了,如果有一天我换成百度的地图,我只需要在MapWrapFactory里返回BaiduMapWrapImpl就可以了,而应用层是不需要做任何改动的

如果有人有更好的方法,欢迎一起探讨

你可能感兴趣的:(如何封装地图类库)