簡易理解設(shè)計模式之:外觀模式——第三方SDK的幫助類

介紹:

外觀模式屬于結(jié)構(gòu)型模式旺上。它為子系統(tǒng)中的一組接口提供一個一致的界面瓶蚂,此模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用宣吱。

類圖:

外觀模式UML類圖.png

Facade(外觀角色):為子系統(tǒng)統(tǒng)一接口窃这。
System(子系統(tǒng)角色):具有各種復(fù)雜行為。

用法:

? 用外觀模式解耦降低了用戶的使用成本征候。(例如在設(shè)計代碼初段杭攻,應(yīng)該有意識地將不同的層分離。如經(jīng)典的MVC模式中疤坝,View層和Model層界面與數(shù)據(jù)的分離兆解,Controller擔(dān)任外觀角色)

? 為一個復(fù)雜子系統(tǒng)提供一個簡單接口。(子系統(tǒng)往往會不斷變化而變得越來越難維護跑揉,這種易變性使得隱藏子系統(tǒng)的具體變化極為重要)

? 維護一個大型遺留的系統(tǒng)時锅睛。(讓外觀角色為遺留代碼設(shè)計一個簡單的接口,讓新系統(tǒng)和外觀角色交互)

個人理解:
這個模式非常簡單历谍,為一個或多個系統(tǒng)提供一個簡單的接口现拒。需要跟復(fù)雜系統(tǒng)交互的時候可以考慮使用這個模式。

例子:

專注開發(fā)工作的你一定使用過此模式望侈,就在我們接入第三方SDK的時候印蔬,都會有意識地用一個“幫助類”去跟SDK具體方法交互,只關(guān)心自己需要用的數(shù)據(jù)脱衙。下面用一個TalkingData第三方SDK的幫助類過一下:

需求:模擬SDK的使用

1侥猬、TalkingDataSDK的使用

首先簡單介紹TalkingData例驹,是專門做數(shù)據(jù)統(tǒng)計的公司,可以根據(jù)自己需求組合各種子SDK退唠,例如頁面埋點眠饮、點擊事件分析、支付的漏洞模型等等铜邮。在這里非常適合使用外觀模式去封裝仪召。

1.1、核心部分

  /**
     * 初始化TalkingData SDK
     *
     * @param context
     */
    public void initTDSDK(Context context) {
        try {
            TalkingDataAppCpa.init(context, "123123123123123123", MainApplication.FLAVOR);
            TCAgent.init(context, "456456456456456", MainApplication.FLAVOR);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

初始化SDK時松蒜,我們同時初始化兩個子系統(tǒng)TalkingDataAppCpa和TCAgent扔茅。

對于程序員來說,封裝一齊的目的是他們是同一家公司的兩個子系統(tǒng)秸苗,我未來還可能接入更多的該公司的功能召娜,就一并放在這個類方便管理。

1.2惊楼、各種子系統(tǒng)的方法舉例


    /**
     * 關(guān)閉TalkingData SDK日志輸出
     */
    public void disableDebug() {
        TalkingDataAppCpa.setVerboseLogDisable();
    }

    /**
     * 注冊成功事件
     *
     * @param mid 用戶member_id
     */
    public void onRegister(String mid) {
        TalkingDataAppCpa.onRegister(mid);
    }

    /**
     * 登錄成功事件
     *
     * @param mid 用戶member_id
     */
    public void onLogin(String mid) {
        TalkingDataAppCpa.onLogin(mid);
    }

    /**
     * 下單事件
     *
     * @param mid 用戶member_id
     */
    public void onOrder(String mid, String orderId, String totalPrice) {
        Order order = Order.createOrder(orderId, (int) (Float.parseFloat(totalPrice) * 100), "CNY");
        TalkingDataAppCpa.onPlaceOrder(mid, order);
    }

    /**
     * 支付成功事件
     *
     * @param mid 用戶member_id
     */
    public void onPaySucceed(String mid, String orderId, String amount, String paytype) {
        TalkingDataAppCpa.onOrderPaySucc(mid, orderId, (int) (Float.parseFloat(amount) * 100), "CNY", paytype);
    }

    /**
     * 事件管理-點擊事件
     *
     * @param context     Activity上下文
     * @param eventId     事件ID
     * @param eventLabel  事件標簽
     * @param eventDetail 事件細節(jié)
     */
    public void onEvent(Context context, String eventId, String eventLabel, Map eventDetail) {
        TCAgent.onEvent(context, eventId, eventLabel, eventDetail);
    }

    /**
     * 進入頁面
     * @param context
     * @param pageName 頁面名稱玖瘸。
     * onPageStart 和 onPageEnd 必須成對調(diào)用;
     */
    public void onPageStart(Context context,String pageName){
        TCAgent.onPageStart(context,pageName);
    }

    /**
     * 退出頁面
     * @param context
     * @param pageName
     */
    public void onPageEnd(Context context,String pageName {            
        TCAgent.onPageEnd(context,pageName);
    }

使用者不需要知道具體的實現(xiàn)檀咙,完全隱藏了實現(xiàn)細節(jié)雅倒。另一方面,隨著SDK不停地迭代更新弧可,實現(xiàn)方法有可能變得面目全非蔑匣。因此后續(xù)維護工作只在這個類完成就可以了,否則改動一個方法需要在你所有的實現(xiàn)的地方都改一遍可多崩潰棕诵。

2裁良、總結(jié)

此模式比較常用,相信你已經(jīng)在不知不覺中使用了校套!主要用法還是作為一些第三方SDK的幫助類价脾。

感謝您的閱讀~

轉(zhuǎn)載請注明出處喔:http://www.reibang.com/p/45dcde8a0715

推薦閱讀

基礎(chǔ)篇:
設(shè)計模式前篇之——UML類圖必會知識點
設(shè)計模式前篇之——一起過一下面向?qū)ο蟮母拍?/a>
創(chuàng)建型模式:
簡易理解設(shè)計模式之:簡單工廠模式——來試試接入支付功能
簡易理解設(shè)計模式之:工廠方法模式——數(shù)據(jù)存儲例子
簡易理解設(shè)計模式之:抽象工廠模式——更換數(shù)據(jù)庫例子
簡易理解設(shè)計模式之:建造者模式——學(xué)習(xí)使用“鏈式調(diào)用”
簡易理解設(shè)計模式之:原型模式——深笛匙、淺拷貝的概念
簡易理解設(shè)計模式之:單例模式——單例模式的幾種常用寫法
結(jié)構(gòu)型模式:
簡易理解設(shè)計模式之:適配器模式——Android列表視圖控件設(shè)計方式
簡易理解設(shè)計模式之:橋接模式——穿衣服經(jīng)典案例2
簡易理解設(shè)計模式之:組合模式——實現(xiàn)View中的樹狀結(jié)構(gòu)
簡易理解設(shè)計模式之:裝飾模式——穿衣服經(jīng)典案例
簡易理解設(shè)計模式之:外觀模式——第三方SDK的幫助類
簡易理解設(shè)計模式之:享元模式——五子棋游戲例子
簡易理解設(shè)計模式之:代理模式——iOS視圖控件設(shè)計方式
行為型模式:
簡易理解設(shè)計模式之:策略模式——優(yōu)化一下支付功能
簡易理解設(shè)計模式之:模板方法模式——Android中的BaseActivity基類
簡易理解設(shè)計模式之:觀察者模式——監(jiān)聽與回調(diào)
簡易理解設(shè)計模式之:狀態(tài)模式——優(yōu)化登錄操作
簡易理解設(shè)計模式之:備忘錄模式——Word文檔的工作原理
簡易理解設(shè)計模式之:迭代器模式——遍歷對象的好幫手
簡易理解設(shè)計模式之:命令模式——實現(xiàn)命令的參數(shù)化配置
簡易理解設(shè)計模式之:責(zé)任鏈模式——OA中請假流程示例
簡易理解設(shè)計模式之:中介者模式——多人聊天室例子
簡易理解設(shè)計模式之:解釋器模式——語言和文法
簡易理解設(shè)計模式之:訪問者模式——員工考核例子

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涕蜂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谎脯,更是在濱河造成了極大的恐慌源梭,老刑警劉巖疼燥,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搞莺,死亡現(xiàn)場離奇詭異,居然都是意外死亡绍刮,警方通過查閱死者的電腦和手機温圆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來孩革,“玉大人岁歉,你說我怎么就攤上這事∠ヲ冢” “怎么了锅移?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵熔掺,是天一觀的道長。 經(jīng)常有香客問我非剃,道長置逻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任备绽,我火速辦了婚禮券坞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肺素。我一直安慰自己报慕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布压怠。 她就那樣靜靜地躺著眠冈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪菌瘫。 梳的紋絲不亂的頭發(fā)上蜗顽,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天,我揣著相機與錄音雨让,去河邊找鬼雇盖。 笑死,一個胖子當(dāng)著我的面吹牛栖忠,可吹牛的內(nèi)容都是我干的崔挖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼庵寞,長吁一口氣:“原來是場噩夢啊……” “哼狸相!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起捐川,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤脓鹃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后古沥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘸右,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年岩齿,在試婚紗的時候發(fā)現(xiàn)自己被綠了太颤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡盹沈,死狀恐怖龄章,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤瓦堵,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布基协,位于F島的核電站,受9級特大地震影響菇用,放射性物質(zhì)發(fā)生泄漏澜驮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一惋鸥、第九天 我趴在偏房一處隱蔽的房頂上張望杂穷。 院中可真熱鬧,春花似錦卦绣、人聲如沸耐量。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽廊蜒。三九已至,卻和暖如春溅漾,著一層夾襖步出監(jiān)牢的瞬間山叮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工添履, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留屁倔,地道東北人。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓暮胧,卻偏偏與公主長得像锐借,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子往衷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355