前言
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類圖
角色說明:
- 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è)計模式-橋接模式