1.希望復(fù)用一些現(xiàn)存的類,但是接口又與復(fù)用環(huán)境要求不一致。
2.其實(shí)適配器模式有點(diǎn)無奈之舉,在前期設(shè)計(jì)的時(shí)候,我們就不應(yīng)該考慮適配器模式,而應(yīng)該考慮通過重構(gòu)統(tǒng)一接口。
想使用一個(gè)已存在的類,但是該類不符合接口需求;或者需要?jiǎng)?chuàng)建一個(gè)可重用的類,適配沒有提供合適接口的其它類。
適配器模式主要解決的問題就是我們要調(diào)用的接口類型,無法滿足我們新系統(tǒng)的使用需求,這時(shí)候,我們需要將舊系統(tǒng)的接口,通過適配器進(jìn)行轉(zhuǎn)配,達(dá)到支持新接口調(diào)用的目的。
對(duì)于這樣的要求,我們通過適配器就可以完成,當(dāng)然如果有多個(gè)接口需要轉(zhuǎn)配,那么我們就需要為每一個(gè)接口提供一個(gè)適配器去完成轉(zhuǎn)換的工作。當(dāng)然具體的調(diào)用過程,我們可以進(jìn)行相應(yīng)的封裝。達(dá)到比較通用的方式去調(diào)用適配器,完成適配服務(wù)。
我們來看看適配的過程。
我們根據(jù)上面的適配器的特點(diǎn)的介紹中,我們來分析下適配器模式的幾類比較適用的使用場(chǎng)景:
1、我們?cè)谑褂玫谌降念悗欤蛘哒f第三方的API的時(shí)候,我們通過適配器轉(zhuǎn)換來滿足現(xiàn)有系統(tǒng)的使用需求。
2、我們的舊系統(tǒng)與新系統(tǒng)進(jìn)行集成的時(shí)候,我們發(fā)現(xiàn)舊系統(tǒng)的數(shù)據(jù)無法滿足新系統(tǒng)的需求,那么這個(gè)時(shí)候,我們可能需要適配器,完成調(diào)用需求。
3、我們?cè)谑褂貌煌瑪?shù)據(jù)庫之間進(jìn)行數(shù)據(jù)同步。(我這里只是分析的是通過程序來說實(shí)現(xiàn)的時(shí)候的情況。還有其他的很多種方式[數(shù)據(jù)庫同步])。
我們本節(jié)給出適配器模式的經(jīng)典實(shí)現(xiàn)代碼,我們這里結(jié)合項(xiàng)目中的查詢服務(wù)來進(jìn)行說明,舊系統(tǒng)中提供一個(gè)查詢服務(wù)方法Query();但是我新系統(tǒng)定義底層的數(shù)據(jù)訪問服務(wù)層
的時(shí)候,卻是使用的GetList()方法,并且將之前的返回結(jié)果集合進(jìn)行包裝成泛型的形式來進(jìn)行。