OkHttp設(shè)計模式剖析(六)外觀模式

上一篇 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

上一篇 OkHttp設(shè)計模式剖析(五)觀察者模式

下一篇 OkHttp設(shè)計模式剖析(七)迭代器模式

All is well.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 對于開發(fā)人員來說,設(shè)計模式有時候就是一道坎,但是設(shè)計模式又非常有用,過了這道坎,它可以讓你水平提高一個檔次。而在a...
    WANKUN閱讀 321評論 0 2
  • ?? 對設(shè)計模式的極簡說明!?? 這個話題可以輕易讓任何人糊涂。現(xiàn)在我嘗試通過用 最簡單 的方式說明它們,來讓你(和我...
    月球人simon閱讀 1,161評論 1 2
  • 最近在整理程序設(shè)計原則,但是只是憑自己的經(jīng)驗簡單描述了一下,顯然不是很規(guī)范。設(shè)計的原則有單一職責(zé)、接口隔離、開放封...
    但莫閱讀 1,133評論 0 23
  • 2012年-2013年,Sunny在CSDN技術(shù)博客中陸續(xù)發(fā)表了100多篇與設(shè)計模式學(xué)習(xí)相關(guān)的文章,涵蓋了七個面向...
    火星抄手閱讀 2,562評論 2 36
  • --<<c和指針>>--當(dāng)組成一個程序的各個源文件分別被編譯之后, 所有的目標(biāo)文件以及那些從一個或多個函數(shù)庫中引用...
    其實我很dou閱讀 319評論 0 0

友情鏈接更多精彩內(nèi)容