上一篇 OkHttp設(shè)計模式剖析(五)觀察者模式
下一篇 OkHttp設(shè)計模式剖析(七)迭代器模式
OKHTTP:
由大名鼎鼎的Square公司開發(fā)的網(wǎng)絡(luò)通信庫。
設(shè)計模式:
軟件開發(fā)中問題的解決套路。
外觀模式簡介
定義:要求一個子系統(tǒng)的外部與其內(nèi)部的通信必須通過一個統(tǒng)一的對象進(jìn)行。
外觀模式(門面模式,F(xiàn)acade Pattern)提供了一個高層次的接口,屏蔽了系統(tǒng)與子系統(tǒng)的復(fù)雜性,使得用戶更容易使用。外觀模式就是我們平時封裝API的手段,基本上所有的第三方庫都用了外觀模式,比如OkHttpClient.class就是OkHttp庫的門面,EventBus.class的就是EventBus庫的門面,GSON.class的就是GSON庫的門面。
OkHttpClient中的外觀模式
OkHttpClient的外觀模式就很明顯了,實例化一個HTTP客戶端client是,可以配置攔截器,調(diào)度器等等。使用者不需要摳里面的實現(xiàn)細(xì)節(jié),配合構(gòu)造者模式build出所需要的OkHttpClient即可,下面的源碼是OkHttpClient官方注釋給的例子:
// 實例化一個默認(rèn)的HTTP客戶端
OkHttpClient client = new OkHttpClient();
// 使用自定義設(shè)置創(chuàng)建HTTP客戶端實例
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new HttpLoggingInterceptor()) //增加攔截器
.cache(new Cache(cacheDir, cacheSize)) //設(shè)置用于讀取和寫入緩存響應(yīng)的響應(yīng)緩存。
.build();
// 實例化一個500毫秒則超時的HTTP客戶端實例
OkHttpClient eagerClient = client.newBuilder()
.readTimeout(500, TimeUnit.MILLISECONDS)
.build();
基于外觀模式構(gòu)建的其他代碼
1、Android的Context類
2、EventBus的EventBus類
3、GSON的GSON類
銀行VIP客戶直接找客戶經(jīng)理
普通用戶去銀行辦理業(yè)務(wù)一般流程入下:取號,填表,排隊,柜臺處理業(yè)務(wù)等。但是如果你是銀行VIP金卡用戶,在該行存款上百萬的那種,進(jìn)銀行客戶經(jīng)理就給你請到辦公室,幫你把茶泡好,然后你讓吩咐他干啥他就干啥。這時候這個客戶經(jīng)理就是銀行的外觀(門面),你不用管他如何處理。
public class WithdrawMoney {
@Override
public String toString() { // 取款類
return "取款";
}
}
public class LoanMoney { // 貸款類
@Override
public String toString() {
return "貸款";
}
}
public class Fund { // 基金類
@Override
public String toString() {
return "購買基金";
}
}
public class CustomerManager{ // 客戶經(jīng)理類
private WithdrawMoney w = new WithdrawMoney();
private LoanMoney l = new LoanMoney();
private Fund f = new Fund();
WithdrawMoney getWithdrawMoney(){
return w;
}
LoanMoney getLoanMoney(){
return l;
}
Fund getFund(){
return f;
}
}
普通用戶去銀行取款,購買基金,得一個一個new這些對象。
public class Main {
//普通客戶去銀行取款,買基金
public static void main(String[] args){
WithdrawMoney w = new WithdrawMoney();
System.out.println(w);//取款
Fund f = new Fund();
System.out.println(f);//購買基金
}
}
VIP用戶去銀行,直接找客戶經(jīng)理即可。
public class Main {
//VIP客戶去銀行
public static void main(String[] args){
CustomerManager cm = new CustomerManager();
System.out.println(cm.getWithdrawMoney());
System.out.println(cm.getFund());
}
}
尤其在業(yè)務(wù)極其復(fù)雜時,比如又買股票,又賣基金,又投資黃金,又做理財,還得交一下今年的車險的時候,客戶經(jīng)理就及其重要了。
所以,外觀設(shè)計模式的核心就是:統(tǒng)一入口。
參考文獻(xiàn)
1、設(shè)計模式|菜鳥教程:https://www.runoob.com/design-pattern/design-pattern-tutorial.html
2、《Android源碼設(shè)計模式解析與實戰(zhàn)》何紅輝,關(guān)愛民著
3、隔壁老李頭:http://www.itdecent.cn/p/82f74db14a18