前幾天在封裝高德的地圖類庫,這種工作沒什么難度,但是很繁瑣,需要把應用層目前用到的高德地圖API全部去掉換成自己封裝好的地圖包裝類庫,我是這么做的,不知道有沒有更好的辦法
- 根據(jù)使用的高德API,對應的創(chuàng)建一個接口,接口里就是這個API在應用層用到的方法
- 創(chuàng)建該接口的實現(xiàn)類,如果這個類里有實際地圖的實現(xiàn)類那么這種類都需要在Factory工廠類里提供,這樣切換地圖框架的時候直接在該接口的工廠類里切換接口的實現(xiàn)類即可(如果沒有實際使用第三方地圖框架,那么這種類也不需要去寫一個接口再繼承,直接寫包裝類即可)
- 如果包裝類里需要使用實際的第三方地圖框架的API實例,而該API實例不能自己創(chuàng)建而需要在地圖框架的地圖類里get獲取,那么該包裝類應該由可以提供所需參數(shù)的其他包裝類創(chuàng)建
- 創(chuàng)建工廠類,工廠類負責創(chuàng)建包裝類的實例,返回值是該包裝類繼承的接口
- 調(diào)用時,應用層使用我們自己的包裝類,傳入?yún)?shù)是和具體地圖無關的值,傳給包裝類以后,包裝類用這些值創(chuàng)建實際的地圖所需的實例
- 修改應用層代碼,在創(chuàng)建具體地圖類實例的時候,用我們的包裝類代替,參數(shù)傳入地圖類實例所需的原始參數(shù)
舉個例子:
針對高德地圖的AMap我寫了個包裝類的接口IAMapWrap,在該接口里都是在應用層調(diào)用到的方法,其中的參數(shù)也是與實際地圖無關的參數(shù),然后在該接口的實現(xiàn)類GaodeMapWrapImpl里,我用這些參數(shù)創(chuàng)建了實際的地圖類實例,然后在MapWrapFactory里我寫了一個方法來提供這個MapWrap實例,當然返回的是IAMapWrap接口,這樣上層就可以使用這個接口來做地圖的操作了,如果有一天我換成百度的地圖,我只需要在MapWrapFactory里返回BaiduMapWrapImpl就可以了,而應用層是不需要做任何改動的
如果有人有更好的方法,歡迎一起探討