版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mingyunxiaohai/article/details/91358206
外观模式:隐藏了系统的复杂性,为子系统中的一组接口提供了一个统一的访问接口。高内聚低耦合。
外观模式非常简单
例子:比如一个网络框架一般都有缓存策略,首先从内存中查找,找不到在去硬盘中查找,还找不到在去网络上下载。
下面开始先定义几个接口
public interface MemoryCache { Bitmap findFromMemory(String url); } public interface DiskCache { Bitmap findFromDisk(String url); } public interface NetworkCache { InputStream findFromNetwork(String url); }
定义实现类
public class MemoryCacheImpl implements MemoryCache { @Override public Bitmap findFromMemory(String url) { System.out.println("从内存中查找"); return null; } } public class DiskCacheImpl implements DiskCache { @Override public Bitmap findFromDisk(String url) { System.out.println("从硬盘查找"); return null; } } public class NetworkCacheImpl implements NetworkCache { @Override public InputStream findFromNetwork(String url) { System.out.println("从网络获取"); return null; } }
一般情况下回这么调用
MemoryCache memoryCache = new MemoryCacheImpl(); memoryCache.findFromMemory("http..."); DiskCache diskCache = new DiskCacheImpl(); diskCache.findFromDisk("http..."); NetworkCache networkCache = new NetworkCacheImpl(); networkCache.findFromNetwork("http...");
如果使用外观模式,把这几个类封装到一个类中,使用起来就方便很多了如下
public class Facade { private String url; private MemoryCache mMemoryCache; private DiskCache mDiskCache; private NetworkCache mNetworkCache; public Facade(String url) { this.url = url; mMemoryCache = new MemoryCacheImpl(); mDiskCache = new DiskCacheImpl(); mNetworkCache = new NetworkCacheImpl(); } public void load(){ mNetworkCache.findFromNetwork(url); mDiskCache.findFromDisk(url); mNetworkCache.findFromNetwork(url); } }
使用
Facade facade = new Facade("http..."); facade.load();
效果跟之前一想,看起来就清爽很多了。