外觀模式核心
隱藏了系統(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ù)更新