設計模式-外觀模式

外觀模式核心

隱藏了系統(tǒng)的復雜性帅刊,為了系統(tǒng)中一組接口提供了一個統(tǒng)一的訪問接口,它的特點是高內(nèi)聚陈症,低耦合蔼水。對外提供簡單統(tǒng)一的接口,隱藏了子系統(tǒng)具體的實現(xiàn)隔離變化录肯,簡單理解為該模式將復雜流程封裝成了簡單的統(tǒng)一的接口提供給開發(fā)者使用趴腋。

舉個簡單的例子

假設我們?nèi)ゼ虞d一張圖片,首先我們?nèi)?nèi)存中找是否有這張圖片嘁信,其次磁盤中于样,最后進行網(wǎng)絡請求拿到這張圖片
我們定義三個接口并進行實現(xiàn)

public interface MemoryCache {
    // 從緩存中尋找圖片
    Bitmap findByMemoryCache(String url);
}
public interface DiskCache {
    // 內(nèi)存中沒有找到,從磁盤中讀取圖片
    Bitmap findByDiskCache(String url);
}
public interface NetworkLoader {
    // 內(nèi)存中沒有找到潘靖,磁盤中沒有找到,就開始從網(wǎng)絡加載圖片
    Bitmap findByNetworkLoader(String url);
}

好了蚤蔓,定義了三個接口卦溢,分別是從緩存,磁盤和網(wǎng)絡獲取圖片,下面開始這三個接口的實現(xiàn)

class MemoryCacheImpl implements MemoryCache {
    @Override
    public Bitmap findByMemoryCache(String url) {
        System.out.println("通過圖片Url单寂,尋找內(nèi)存中緩存圖片");
        return null;
    }
}
public class DisCacheImpl implements DiskCache {
    @Override
    public Bitmap findByDiskCache(String url) {
        System.out.println("通過圖片Url贬芥,尋找磁盤中緩存圖片");
        return null;
    }
}
public class NetworkLoaderImpl implements NetworkLoader {
    @Override
    public Bitmap findByNetworkLoader(String url) {
        System.out.println("通過圖片Url,從網(wǎng)絡加載圖片");
        return null;
    }
}

按照我們以往的邏輯宣决,基本實現(xiàn)都是這樣:

        MemoryCache memoryCache = new MemoryCacheImpl();
        memoryCache.findByMemoryCache(URL);

        DiskCache diskCache = new DisCacheImpl();
        diskCache.findByDiskCache(URL);

        NetworkLoader networkLoader = new NetworkLoaderImpl();
        networkLoader.findByNetworkLoader(URL);

來看打印結果

通過圖片Url蘸劈,尋找內(nèi)存中緩存圖片
通過圖片Url,尋找磁盤中緩存圖片
通過圖片Url尊沸,從網(wǎng)絡加載圖片

以上代碼威沫,就是加載圖片的大體流程,如果從緩存中找不到從磁盤找再者網(wǎng)絡請求洼专,具體代碼實現(xiàn)略過
大家可以想到既然是外觀者模式棒掠,就是把這幾個進行整合到一起實現(xiàn)這樣的邏輯,請看具體代碼實現(xiàn)

public class Facade {
    
    private String url;
    private MemoryCache memoryCache;
    private DiskCache diskCache;
    private NetworkLoader networkLoader;

    public Facade(String url) {
        this.url = url;
        memoryCache = new MemoryCacheImpl();
        diskCache = new DisCacheImpl();
        networkLoader = new NetworkLoaderImpl();
    }
    
   public void loader(){
        memoryCache.findByMemoryCache(url);
        diskCache.findByDiskCache(url);
        networkLoader.findByNetworkLoader(url);
    }
}

代碼實現(xiàn)就兩行代碼實現(xiàn)了三個接口邏輯

  Facade facade = new Facade(URL);
  facade.loader();

同樣也打印出了相同結果

通過圖片Url屁商,尋找內(nèi)存中緩存圖片
通過圖片Url烟很,尋找磁盤中緩存圖片
通過圖片Url,從網(wǎng)絡加載圖片

結語

雖然舉這個例子不怎么樣蜡镶,但是外觀者模式的核心已經(jīng)體現(xiàn)出來了雾袱,希望大家有所感悟,對自己日后寫代碼有所幫助

感謝

感謝大家的閱讀 點個贊唄
關注我 持續(xù)更新

Github

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末官还,一起剝皮案震驚了整個濱河市芹橡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妻枕,老刑警劉巖僻族,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異屡谐,居然都是意外死亡述么,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門愕掏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來度秘,“玉大人,你說我怎么就攤上這事饵撑〗J幔” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵滑潘,是天一觀的道長垢乙。 經(jīng)常有香客問我,道長语卤,這世上最難降的妖魔是什么追逮? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任酪刀,我火速辦了婚禮,結果婚禮上钮孵,老公的妹妹穿的比我還像新娘骂倘。我一直安慰自己,他們只是感情好巴席,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布历涝。 她就那樣靜靜地躺著,像睡著了一般漾唉。 火紅的嫁衣襯著肌膚如雪荧库。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天毡证,我揣著相機與錄音电爹,去河邊找鬼。 笑死料睛,一個胖子當著我的面吹牛丐箩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恤煞,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼屎勘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了居扒?” 一聲冷哼從身側響起概漱,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喜喂,沒想到半個月后瓤摧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡玉吁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年照弥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片进副。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡这揣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出影斑,到底是詐尸還是另有隱情给赞,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布矫户,位于F島的核電站片迅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏皆辽。R本人自食惡果不足惜障涯,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一罐旗、第九天 我趴在偏房一處隱蔽的房頂上張望膳汪。 院中可真熱鬧唯蝶,春花似錦、人聲如沸遗嗽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痹换。三九已至征字,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娇豫,已是汗流浹背匙姜。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冯痢,地道東北人氮昧。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像浦楣,于是被迫代替她去往敵國和親袖肥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 目錄 本文的結構如下: 什么是外觀模式 模式的結構 代碼示例 優(yōu)點和缺點 適用環(huán)境 模式應用 模式擴展 補充 一振劳、...
    w1992wishes閱讀 638評論 0 1
  • 1.外觀模式簡介 外觀模式(Facade)在開發(fā)過程中的運用頻率非常高椎组,尤其是在現(xiàn)階段各種第三方SDK充斥在我們的...
    道道明明白白閱讀 979評論 1 3
  • 文摘一:有些地方外觀模式也被叫做門面模式,英文即Facade Pattern历恐,提前說明一下寸癌。 試想這種情況,用戶添...
    _淺墨_閱讀 479評論 0 1
  • 一個子系統(tǒng)的外部與其內(nèi)部的通信通過一個統(tǒng)一的外觀類進行弱贼,外觀類將客戶類與子系統(tǒng)的內(nèi)部復雜性分隔開蒸苇,使得客戶類只需要...
    沉麟閱讀 524評論 0 0
  • 外觀模式(Facade) 在現(xiàn)實生活中,常常存在辦事較復雜的例子哮洽,如辦房產(chǎn)證或注冊一家公司填渠,有時要同多個部門聯(lián)系,...
    Acton_zhang閱讀 170評論 0 1