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