1. 建造者模式
一個(gè)對(duì)象,如果他的屬性多而復(fù)雜,我們?cè)趧?chuàng)建賦值該對(duì)象的屬性的時(shí)候就比較麻煩,這時(shí)候如果有一個(gè)統(tǒng)一管理這些屬性的地方就好了。建造者模式,就可以很好的充當(dāng)這個(gè)角色。
建造者,是將對(duì)象的屬性分裝在內(nèi)部,方便調(diào)用者去使用,統(tǒng)一管理。就拿著名的Retrofit來(lái)看,在retrofit 內(nèi)部有一個(gè)Builder對(duì)象,統(tǒng)一管理者retrofit創(chuàng)建所需要的參數(shù)。偽代碼如下:
class Retrofit {
private var base_url:String?=""
private var callAdapterFactory:String?=""
private var convertapterFactory:String?=""
private var client:String?=""
constructor(base_url:String?,callAdapterFactory:String?,convertapterFactory:String?,client:String?){
this.base_url=base_url
this.callAdapterFactory=callAdapterFactory
this.convertapterFactory=convertapterFactory
this.client=client
}
class RetrofitBuilder {
private var base_url:String?=""
private var callAdapterFactory:String?=""
private var convertapterFactory:String?=""
private var client:String?=""
constructor()
fun client(client:String?): RetrofitBuilder {
this.client=client
return this
}
}
}
在創(chuàng)建retrofit對(duì)象的時(shí)候,可以使用RetrofitBuilder對(duì)象來(lái)設(shè)置,最后通過(guò)builder方法,返回我們想要的Retrofit對(duì)象。
總結(jié):建造者模式,主要是為了更加方便我們?nèi)ソy(tǒng)一創(chuàng)建管理對(duì)象的屬性。
2.依賴(lài)倒置模式
高層模塊不應(yīng)該依賴(lài)低層模塊,二者都應(yīng)該依賴(lài)其抽象;抽象不應(yīng)該依賴(lài)細(xì)節(jié);細(xì)節(jié)應(yīng)該依賴(lài)抽象。
我個(gè)人的理解,其實(shí)就是接口抽象出具體的細(xì)節(jié)方法,retrofit的OkhttpCall就是這種模式,內(nèi)部實(shí)現(xiàn)了retrofit2.Call,實(shí)際內(nèi)部實(shí)現(xiàn)網(wǎng)絡(luò)call還是使用的okhttp3.call。我們來(lái)仿照寫(xiě)一個(gè)例子:
- RetrofitCall就是retrofit.call借口,定義了網(wǎng)絡(luò)方面相關(guān)接口。
- OkhttpCall是retrofitCall的實(shí)現(xiàn)類(lèi),類(lèi)似OkhttpCall,retrofit默認(rèn)的網(wǎng)絡(luò)請(qǐng)求類(lèi),其內(nèi)部實(shí)現(xiàn)是通過(guò)okhttp.call實(shí)現(xiàn)的
- OkchangeCall也是retrofitCall的實(shí)現(xiàn)類(lèi),如果以后想換一種網(wǎng)絡(luò)實(shí)現(xiàn)類(lèi),那就方便(當(dāng)然現(xiàn)在還沒(méi)有支持這個(gè),但是接口入口已經(jīng)很好的提供了擴(kuò)展性)
總結(jié):依賴(lài)倒置,本質(zhì)是面向接口編程,很好的解耦了對(duì)象和對(duì)象之間的關(guān)系,最上層業(yè)務(wù)層的實(shí)現(xiàn)類(lèi)內(nèi)部可以做很多的擴(kuò)展,但是它的核心功能都是一樣的,就是接口類(lèi)暴露出的方法。
3. 適配器模式
rxjava中使用callAdapter和convertAdapter來(lái)進(jìn)行適配。就拿callAdapter來(lái)舉例說(shuō)明。
callAdapter在ServiceMethod.build()方法中,根據(jù)接口中定義的返回類(lèi)型去遍歷callAdapterFactoryList來(lái)嘗試創(chuàng)建指定的callAdapter。
這是一種對(duì)象適配模式,將我們?cè)械姆祷仡?lèi)型根據(jù)適配器生成不同的網(wǎng)絡(luò)請(qǐng)求對(duì)象。
適配器的兩種模式,可以參考這篇文章android適配器模式
4.策略模式
策略模式定義了一些列的算法,并將每一個(gè)算法封裝起來(lái),而且使它們還可以相互替換。策略模式讓算法獨(dú)立于使用它的客戶而獨(dú)立變換。
簡(jiǎn)單的來(lái)說(shuō),就是做某些事情可能同時(shí)有多個(gè)方案,不同的時(shí)期使用不同的方案,怎樣在調(diào)用的過(guò)程中盡可能的減少代碼的修改。主要還是使用java的多態(tài)。
在retrofit中,RxjavaCallAdapter中使用了策略模式,分為三種不同的adapte
- simpleAdapter
正常的網(wǎng)絡(luò)請(qǐng)求對(duì)象的返回,返回類(lèi)型中不會(huì)包含response請(qǐng)求結(jié)果 - ResponseCallAdapter
- ResultCallAdapter這兩個(gè)adapter在轉(zhuǎn)化返回請(qǐng)求的時(shí)候,都會(huì)將response結(jié)果包裝返回,可以方便開(kāi)發(fā)人員獲取到返回code
5.裝飾模式
裝飾模式又稱(chēng)包裝模式,就是在原來(lái)的類(lèi)上做一些擴(kuò)展,使得新的對(duì)象比原來(lái)的對(duì)象功能上更加豐富。