Android的設(shè)計模式-外觀模式

前言

Android的設(shè)計模式系列文章介紹国撵,歡迎關(guān)注砌庄,持續(xù)更新中:

Android的設(shè)計模式-設(shè)計模式的六大原則
一句話總結(jié)23種設(shè)計模式則
創(chuàng)建型模式:
Android的設(shè)計模式-單例模式
Android的設(shè)計模式-建造者模式
Android的設(shè)計模式-工廠方法模式
Android的設(shè)計模式-簡單工廠模式
Android的設(shè)計模式-抽象工廠模式
Android的設(shè)計模式-原型模式
行為型模式:
Android的設(shè)計模式-策略模式
Android的設(shè)計模式-狀態(tài)模式
Android的設(shè)計模式-責(zé)任鏈模式
Android的設(shè)計模式-觀察者模式
Android的設(shè)計模式-模板方法模式
Android的設(shè)計模式-迭代器模式
Android的設(shè)計模式-備忘錄模式
Android的設(shè)計模式-訪問者模式
Android的設(shè)計模式-中介者模式
Android的設(shè)計模式-解釋器模式
Android的設(shè)計模式-命令模式
結(jié)構(gòu)型模式:
Android的設(shè)計模式-代理模式
Android的設(shè)計模式-組合模式
Android的設(shè)計模式-適配器模式
Android的設(shè)計模式-裝飾者模式
Android的設(shè)計模式-享元模式
Android的設(shè)計模式-外觀模式
Android的設(shè)計模式-橋接模式

1.定義

要求一個子系統(tǒng)的外部與其內(nèi)部的通信必須通過一個統(tǒng)一的對象進行礁芦。外觀模式提供一個高層次的接口孝凌,使得子系統(tǒng)更易于使用难礼。

2.介紹

  • 外觀模式屬于結(jié)構(gòu)型模式穴亏。
  • 外觀模式也叫門面模式。
  • 通常我們對API進行封裝滓走,都會用到外觀模式垦江,只是我們可能不知道而已。外觀模式通過一個外觀類使得整個系統(tǒng)的結(jié)構(gòu)只有一個統(tǒng)一的高層接口搅方,這樣能降低用戶的使用成本比吭。

3.UML類圖

外觀模式UML類圖.jpg
角色說明:
  • Facade(外觀角色):對外的統(tǒng)一入口绽族。
  • Complex System(復(fù)雜系統(tǒng)):一般由多個子系統(tǒng)構(gòu)成,負責(zé)具體功能的實現(xiàn)衩藤。

4.實現(xiàn)

我們玩游戲時一般都有登錄和充值等操作吧慢,這些一般都是第三方SDK來完成。游戲研發(fā)一般只需進行簡單的接入就可以使用登錄充值功能了赏表。我們來實現(xiàn)一個簡單的游戲SDK:

4.1 創(chuàng)建外觀角色

這里只要是封裝游戲SDK對外的接口检诗,供游戲去研發(fā)去調(diào)用。這里只有兩個接口:登錄和充值瓢剿。

    public class GameSdk {
        public void login() {//登錄接口
            //調(diào)用登錄子系統(tǒng)的接口
            LoginManager loginManager = new LoginManager();
            loginManager.login();
        }

        public void pay(int momey) {//支付接口
            //調(diào)用支付子系統(tǒng)的接口
            PayManager payManager = new PayManager();
            payManager.pay(momey);
        }
    }
4.2 子系統(tǒng)
    //登錄系統(tǒng)
    public class LoginManager {
        public void login() {
            System.out.println("打開登錄界面");
            System.out.println("進行登錄操作");
            System.out.println("登錄成功");
        }
    }
    //支付系統(tǒng)
    public class PayManager {
        public void pay(int momey) {
            System.out.println("生成訂單信息");
            System.out.println("選擇支付方式");
            System.out.println("支付成功:" + momey + "元");
        }
    }
4.3 客戶端測試:
     private void test() {
        //這里是游戲研發(fā)逢慌,通過調(diào)用login()和pay()就能調(diào)起登錄和支付,無需關(guān)心支付是使用支付寶還是威信等间狂,這是游戲SDK里面去做的事攻泼。
        GameSdk gameSdk = new GameSdk();
        gameSdk.login();
        gameSdk.pay(6);
    }
輸出結(jié)果:
打開登錄界面
進行登錄操作
登錄成功
生成訂單信息
選擇支付方式
支付成功:6元

5. 應(yīng)用場景

  • 為一個復(fù)雜的子系統(tǒng)提供一個簡單接口,對外隱藏子系統(tǒng)的具體實現(xiàn)鉴象、隔離變化忙菠。
  • 使用外觀模式可以將一個子系統(tǒng)和使用它的客戶端以及其它的子系統(tǒng)分離開來,這就提高了子系統(tǒng)的獨立性和可移植性炼列。
  • 在構(gòu)建一個層次化結(jié)構(gòu)的時候只搁,可以使用外觀模式定義每一個層次對外交互的接口。這樣俭尖,層與層之間只需要通過外觀進行通信氢惋,從而簡化層與層之間的依賴關(guān)系。

6. 優(yōu)點

  • 降低了客戶端與子系統(tǒng)類的耦合度稽犁,實現(xiàn)了子系統(tǒng)與客戶之間的松耦合關(guān)系焰望。
  • 外觀類對子系統(tǒng)的接口封裝,使得系統(tǒng)更易于使用已亥。
  • 提高靈活性熊赖,不管子系統(tǒng)如何變化,只要不影響門面對象虑椎,就可以自由修改震鹉。

7. 缺點

  • 增加新的子系統(tǒng)可能需要修改外觀類的源代碼,違背了“開閉原則”捆姜。
  • 所有子系統(tǒng)的功能都通過一個接口來提供传趾,這個接口可能會變得很復(fù)雜。

8. Android中的源碼分析

外觀模式在Android中應(yīng)用也非常廣泛泥技,比如Context類浆兰,里面封裝了很多方法,還是以startActivity()方法為例。實際上startActivity()是通過ActivityManagerService來實現(xiàn)的簸呈,ActivityManagerService我們應(yīng)該都有耳聞榕订,但是實際開發(fā)中一般都用不到,通過封裝的方式蜕便,Context類隱藏了這些細節(jié)劫恒,我們只要簡單調(diào)個方法就可以啟動一個新的Activity
這就是外觀模式在Android應(yīng)用的例子了玩裙。當(dāng)然這種應(yīng)用比比皆是兼贸,我們平時開發(fā)也經(jīng)常用的到段直。

相關(guān)文章閱讀
Android的設(shè)計模式-設(shè)計模式的六大原則
一句話總結(jié)23種設(shè)計模式則
創(chuàng)建型模式:
Android的設(shè)計模式-單例模式
Android的設(shè)計模式-建造者模式
Android的設(shè)計模式-工廠方法模式
Android的設(shè)計模式-簡單工廠模式
Android的設(shè)計模式-抽象工廠模式
Android的設(shè)計模式-原型模式
行為型模式:
Android的設(shè)計模式-策略模式
Android的設(shè)計模式-狀態(tài)模式
Android的設(shè)計模式-責(zé)任鏈模式
Android的設(shè)計模式-觀察者模式
Android的設(shè)計模式-模板方法模式
Android的設(shè)計模式-迭代器模式
Android的設(shè)計模式-備忘錄模式
Android的設(shè)計模式-訪問者模式
Android的設(shè)計模式-中介者模式
Android的設(shè)計模式-解釋器模式
Android的設(shè)計模式-命令模式
結(jié)構(gòu)型模式:
Android的設(shè)計模式-代理模式
Android的設(shè)計模式-組合模式
Android的設(shè)計模式-適配器模式
Android的設(shè)計模式-裝飾者模式
Android的設(shè)計模式-享元模式
Android的設(shè)計模式-外觀模式
Android的設(shè)計模式-橋接模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吃溅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鸯檬,更是在濱河造成了極大的恐慌决侈,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喧务,死亡現(xiàn)場離奇詭異赖歌,居然都是意外死亡,警方通過查閱死者的電腦和手機功茴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門庐冯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坎穿,你說我怎么就攤上這事展父。” “怎么了玲昧?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵栖茉,是天一觀的道長。 經(jīng)常有香客問我孵延,道長吕漂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任尘应,我火速辦了婚禮惶凝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘犬钢。我一直安慰自己苍鲜,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布娜饵。 她就那樣靜靜地躺著坡贺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遍坟,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天拳亿,我揣著相機與錄音,去河邊找鬼愿伴。 笑死肺魁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的隔节。 我是一名探鬼主播鹅经,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼怎诫!你這毒婦竟也來了瘾晃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤幻妓,失蹤者是張志新(化名)和其女友劉穎蹦误,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肉津,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡强胰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了妹沙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偶洋。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖距糖,靈堂內(nèi)的尸體忽然破棺而出玄窝,到底是詐尸還是另有隱情,我是刑警寧澤肾筐,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布哆料,位于F島的核電站,受9級特大地震影響吗铐,放射性物質(zhì)發(fā)生泄漏东亦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一唬渗、第九天 我趴在偏房一處隱蔽的房頂上張望典阵。 院中可真熱鬧,春花似錦镊逝、人聲如沸壮啊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歹啼。三九已至玄渗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狸眼,已是汗流浹背藤树。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拓萌,地道東北人岁钓。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像微王,于是被迫代替她去往敵國和親屡限。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353